質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

2846閲覧

VBA ファイル読込み後、条件判定でデータを読み込みたい

qqkf

総合スコア10

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/10/05 14:21

編集2020/10/05 15:53

■実現したいことは以下になります。
・画像2の項目列(B4:B14)について
指定された項目(緑枠)が記載されていればデータ部分を読み込んで、画像1「自動読込みツール.xlsm」の緑枠に条件判定付きで記載させたい。
例えば、B4の"A Sample"じゃないとD4の"4.5634"を読み込まない。
それ以外("ASample"や"A Ssample"など)記載されていれば画像1「自動読込みツール.xlsm」の緑枠には、"該当項目がありません"というメッセージを記載させたい。
但し、項目の列と行は固定です("A Sample"だとB4が固定です)。

■分からないこと
・どうやって該当の項目を条件判定しているか分からないです。

■前提
・条件判定なしで自動で読み込むプログラムは作成いたしました。

画像が以下になります。

イメージ説明
画像1 自動読込みツール.xlsmの画面 [読込み結果]シート
データクリアボタンは無視していいです。

イメージ説明
画像2 読み込みデータ.xlsの画面 [読み込みデータ]シート

コードが以下になります。

VBA

1Private Sub Select_Read_FilesButton_Click() 2'---------------------------- 3'データファイル読込みボタン 4'---------------------------- 5 Dim FType As String 'ファイルの種類 6 Dim Prompt As String 'ダイアログのタイトル 7 Dim Target As String '任意読み込むパス 8 Dim FPath As Variant 'ファイル参照パス 9 Dim Pos As Long '参照先のセル 10 Dim WS As Worksheet '対象のシート名 11 12 Set WS = Worksheets("読込み結果") 13 14 '選択できるファイルの種類をxlsに限定 15 FType = "Excelブック,*.xls" 16 17 'ダイアログのタイトルを指定 18 Prompt = "対象データファイルを選択して下さい" 19 20 'ファイル参照ダイアログの表示 21 FPath = Application.GetOpenFilename(FType, , Prompt) 22 23 'ダイアログでキャンセルボタンが押された場合は処理を終了 24 If FPath = False Then 25 End 26 End If 27 28 'G5セルにファイル名をセット 29 WS.Cells(5, 7).Value = FPath 30 31 Pos = InStrRev(Cells(5, 7).Value, "\") 32 33 ' "'"はファイル名からシート名まで括る 34 Target = "'" & Left(Cells(5, 7).Value, Pos) & "[" & Mid(Cells(5, 7).Value, Pos + 1) & "]" 35 36 '外部参照式にて読み込む際ファイルをオープンさせない 37 Range("E8") = ExecuteExcel4Macro(Target & "読み込みデータ'!R1C2") 'Sample No.表示 38 39 Range("E9") = ExecuteExcel4Macro(Target & "読み込みデータ'!R1C4") 'Test No.表示 40 41 WS.Range("C10").Formula = "=" & Target & "読み込みデータ'!D4" 'A Sample表示 42 WS.Range("C10").Value = WS.Range("C10").Value 43 44 WS.Range("E10").Formula = "=" & Target & "読み込みデータ'!D5" 'B Sample表示 45 WS.Range("E10").Value = WS.Range("E10").Value 46 47 WS.Range("G10").Formula = "=" & Target & "読み込みデータ'!D6" 'C Sample表示 48 WS.Range("G10").Value = WS.Range("G10").Value 49 50 WS.Range("C11").Formula = "=" & Target & "読み込みデータ'!D8" 'D Sample表示 51 WS.Range("C11").Value = WS.Range("C11").Value 52 53 WS.Range("E11").Formula = "=" & Target & "読み込みデータ'!D10" 'E Sample表示 54 WS.Range("E11").Value = WS.Range("E11").Value 55 56 WS.Range("G11").Formula = "=" & Target & "読み込みデータ'!D13" 'F Sample表示 57 WS.Range("G11").Value = WS.Range("G11").Value 58 59 WS.Range("I11").Formula = "=" & Target & "読み込みデータ'!D14" 'G Sample表示 60 WS.Range("I11").Value = WS.Range("I11").Value 61 62End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2020/10/05 15:21

説明に曖昧な点、矛盾した点があります。情報は正確に提示してください。 > 画像1 自動読込みツール.xlsmの画面 [読込み結果]シート > 画像2 自動読込みツール.xlsmの画面 [読込み結果]シート 画像2 は 自動読込みツール.xlsmの画面ではないですよね。 > それ以外("ASample"や"A Ssample"など)記載されていれば「データサンプル.xlsm」の緑枠には、"該当項目がありません"というメッセージを記載させたい。 「データサンプル.xlsm」というのは 画像2 のブックのことですか。画像2の「読み込みデータ」シートの緑枠の"ASample"や"A Ssample"と記載されたセルに「該当項目はありません」と上書きするということですか。
qqkf

2020/10/05 16:01

修正いたしました。 > 画像2 は 自動読込みツール.xlsmの画面ではないですよね。 画像2は読み込みデータ.xlsになります。 > 「データサンプル.xlsm」というのは 画像2 のブックのことですか。 画像1の「自動読込みツール.xlsm」のことです。 > 画像2の「読み込みデータ」シートの緑枠の"ASample"や"A Ssample"と記載されたセルに「該当項目はありません」と上書きするということですか。 いいえ、「読み込みデータ」シートの"A Sample"が仮に"ASample"や"A Ssample"など記載された場合、画像1の結果では「該当項目はありません」と緑枠に記載することになります("A Sample"の場合だとC10に記載)。 "A Sample"という項目名で固定?させたいです。
kitasue

2020/10/06 00:10

読み込みデータ.xlsは、Openしてはいけないのですか?
qqkf

2020/10/06 10:18

kitasueさん 読み込んでいる間は、Openしないプログラムで作成しているため、できればOpenしたくないです。
guest

回答2

0

ベストアンサー

A Sampleの個所は下記のように。

vba

1 With WS.Range("C10") 2 .Formula = "=IF(" & Target & "読み込みデータ'!B4=B10," & _ 3 Target & "読み込みデータ'!D4,""該当項目がありません"")" 4 .Value = .Value 5 End With

他も同様に書き換えてください。

ExecuteExcel4Macro については Excel 4.0のマクロを使えるようにするものですが、現在はMSの公式ドキュメントもないし、いつ使かえなくなるか分からないものなので、積極的に使うものではないと思います。

ExecuteExcel4Macroについて|VBA技術解説

投稿2020/10/05 23:35

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsu99

2020/10/06 10:05

一点、教えていただけませんでしょうか。 .Value = .Value は、代入元のセルと代入先のセルが同じですが、どのような意味があるのでしょうか。 また、このステートメントがないと、なにか不都合があるのでしょうか。
qqkf

2020/10/06 10:16

コーディングありがとうございます。 コードを修正し、実現したことができたのですが、[読込み結果]シートの"A Sample"が"A Sam"など省略した場合はどうやればいいでしょうか。
hatena19

2020/10/06 12:15

.Formula = "=IF(" & Target & "読み込みデータ'!B4=B10," & _ のA10の部分を ""A Sample"" に変更すればいいでしょう。 .Formula = "=IF(" & Target & "読み込みデータ'!B4=""A Sample""," & _
hatena19

2020/10/06 12:19

.Value = .Value の意味は、セルに式を設定して他ブックのシートの値を読み込んでいますが、その式を値(Value)で上書きすることで、式を値に変換しています。
tatsu99

2020/10/06 13:04

なるほど、そのような意味があるのですか。ありがとうございました。
qqkf

2020/10/07 10:52

コーディングありがとうございました。 省略含めて動作確認できました。 また、ExecuteExcel4Macroについてのリンクもありがとうございます。
guest

0

A Sampleの個所だけ回答します。

VBA

1 WS.Range("C10").Formula = "=" & Target & "読み込みデータ'!D4" 'A Sample表示 2 WS.Range("C10").Value = WS.Range("C10").Value

VBA

1 item_name = ExecuteExcel4Macro(Target & "読み込みデータ'!R4C2") 'A Sampleの項目名取得 2 If item_name = "A Sample" Then 3 WS.Range("C10").Formula = "=" & Target & "読み込みデータ'!D4" 'A Sample表示 4 Else 5 WS.Range("C10").Value = "該当項目がありません" 6 End If

に変えてください。ほかも同様にします。
(読み込みデータ'!R4C2 のR4C2の値は該当読み込みセルの個所に合わせてください)
item_nameは、上部に
Dim item_name As String '項目名
と定義しておいてください。

投稿2020/10/05 20:01

tatsu99

総合スコア5442

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsu99

2020/10/06 10:02

私の提示した方法よりは、hatena19さんの方がエレガントなので、私のは取り下げます。
qqkf

2020/10/06 10:10

コーディングありがとうございます。 実現したいことに当てはまっていたので参考にしたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問