Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
2ファイル間で複雑なコピペをする場合
投稿日時: 20/03/24 20:46:04
投稿者: おさしみ

VBAの書き方で質問です。
 
 
Excelファイル1、2、3がそれぞれ違うフォルダにあり、
ファイル1はマクロ実行用のファイルとして使う予定で、ファイル2.3はそれぞれデータが既に入っています。
 
ファイル1のB2セルに、読み込みファイルとしてファイル2のファイル名まで指定したフォルダパス、
B3セルにファイル2の指定シート名。
B4セルに書き出しファイルとしてファイル3のファイル名まで指定したフォルダパス、
B5セルにファイル3の指定シート名を設定し、マクロボタンを押下すると
 
ファイル2の指定したシート名のセルB1:C1の両方にデータが入っていた場合のみ、ファイル2のB1:E1を
ファイル3の指定したシート名のセルA1:C1(ファイル2のB1:D1)、H1(ファイル2のE1)に転記し、
ファイル2のセルB1:C1どちらかにデータが入っていなかった場合は飛ばしてB2:C2へ、B2:C2の両方にデータが入っていたらB2:E2をファイル3のセルA2:C2(ファイル2のB2:D2)、H2 (ファイル2のE2)と転記していく動きで、ファイル2のB45:C45(ファイル3のA45:C45、H45)まで1行ずつ繰り返し処理をする動きにしたいのですが、どう書けば良いでしょうか…
飛ばした場合もファイル3に空白行は作らないようにしたいです。
全く分からず止まってしまっています、お詳しい方ご回答お願い致します!

回答
投稿日時: 20/03/25 06:52:51
投稿者: どら

ほぼ丸投げの作成依頼では有効な回答は付かないと思います。
長々と綴られた質問を読んで要求を理解するのが苦痛です。

回答
投稿日時: 20/03/25 19:14:13
投稿者: MMYS

おさしみ さんの引用:

ファイル2の指定したシート名の・・・・どう書けば良いでしょうか…

上記は1行が、296文字あります。つまり句点まで長い。
ダラダラと書いて第三者に伝わるのでしょうか。
人に伝えることと、コードを書くことは共通してます。
読みての理解を考えずに書くことか、コードを書けない理由です。
 
コードを書く前に、やりたいことを整理して下さい。
この時、文を短くがポイント。できるだけ箇条書きです。
すると処理方法(アルゴリズム)が見えて来ます。
 
−−−−−−−−−−−−−−−−−−−−
必要なブックは3つ
・ブログラム ブック
・元データ ブック
・出力データ ブック
 
ブログラムブック
・B2セル:元データのフルパス
・B3セル:元データの指定シート名。
・B4セル:出力データ フルパス
・B5セル:出力データの指定シート名。
 
 
処理する内容
指定ファイルが
・指定ファイルが有効な時。◯◯する
・指定ファイルが有効でない時。△△する
 
◯◯は、値を別のシートに転記する
・元シートのB1:E1 を 出力シートのA1:C1 に転記
・元シートのH1 を 出力シートのE1 に転記
 
△△は・・・・・・
 
−−−−−−−−−−−−−−−−−−−−
 
仕様を定義したら具体適なコードを考えます。例えば
 ・指定ファイルが有効な時。◯◯する
 ・指定ファイルが有効でない時。△△する
はアルゴリズムで次のようになります。
 
If 指定ファイルが有効な時 Then
  ◯◯する
Else
  △△する
End If

これを実際のコードにします。
 
Sub Sample()
  If (Range("B1").Value <> "") And (Range("C1").Value <> "") Then
    MsgBox "◯◯する"
  Else
    MsgBox "△△する"
  End If
End Sub

さてと、このとき実際に動かして、期待した通りの動作かが、重要です。
コードが完成したら抽象化部分の具体的なコードを考えます。
このとき、サブルーチン化がポイント。
 
Sub Sample()
  If (Range("B1").Value <> "") And (Range("C1").Value <> "") Then
    SampleA
  Else
    MsgBox "△△する"
  End If
End Sub

Sub SampleA()
    MsgBox "◯◯する"
End Sub

SampleAの処理ですが、ここは
・元シートのB1:E1 を 出力シートのA1:C1 に転記
・元シートのH1 を 出力シートのE1 に転記
ですね。
これはVBAで、どんなコードになりますか。お考えください。
 
 

回答
投稿日時: 20/03/25 19:55:57
投稿者: もこな2

こちらの掲示板では規約でマルチポストを禁じているわけではないですが、それでも何処とマルチしているか示した方が良くないですかね…
 
http://www.excel.studio-kazu.jp/kw/20200324190527.html

同じ方ではないですか?

投稿日時: 20/03/25 21:09:27
投稿者: おさしみ

どら様、MMYS様
言葉足らずの伝わりにくい文章申し訳ありません。
今後質問する際はしっかり伝わりやすい文章を構成してから投稿します。
ご回答ありがとうございました。
 
特にMMYS様、人に伝えることとコードを書くことは共通しているというお言葉、心に響きました。
VBA初心者ですが、このことは常に肝に銘じようと思います。
いただいたアドバイスを元に、無事完成できるように頑張ります。