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

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

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

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

Q&A

解決済

2回答

1767閲覧

VBAで他ブックの値を参照して特定の文字列を置換させたいです

aki0430

総合スコア2

VBA

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

0グッド

1クリップ

投稿2020/04/24 03:02

こんにちは。vba知識がなく、困っています。
やりたいの、は特定の文字列を検索して、置換用リスト(別ブック)の値にどんどん置き換えていきたいです。

例えば現状こういう状態のブックAがあります

C列N列
1-1別ブック参照
1-3別ブック参照
1-4別ブック参照

これに、置換用リストのブックBが別で存在します。

番号パラメータ
1-1AAA
1-3BBB
1-4CCC

この2つを使ってブックAの「別ブック参照」の場所を、ブックBの値で置換したいです
求める結果はこのような形です。

C列N列
1-1AAA
1-3BBB
1-4CCC

ブックAの1-1等の値と、ブックBの番号1-1等の値は紐づいています。

完全に素人なので知識が全くなく、サンプルコードのようなものすら書くことが難しく困っております。
申し訳ありませんがお力添えを頂きたいです。
よろしくお願いいたします。

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

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

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

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

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

meg_

2020/04/24 04:16

sageさんの回答のコメントにあるように、Vlookup関数を使うのは良いと思います。参照後にコピー&値の貼り付けで値にすれば良いですし。 今回の作業は繰り返し発生するものでもないように思われますし。 ※もし定期的に発生する作業であればVBAを検討しても良いかとは思います。
guest

回答2

0

ベストアンサー

少し強引なコードですが、このようなエッセンスが必要です。
十分に吟味できていませんがサンプルですのでよろしくお願いいたします。
動作確認はしていますが・・・。

Book名:Master
シート名:Master.xlsx

A列   B列
コード 名まえ
1-1 CCC
1-2 BBB
1-3 AAAA

Book名:Main.xlsm
(※マクロ付きbook)
シート名:Main

A列   B列
コード 名まえ
1-1 置換される
1-2 置換される
1-3 置換される

VBAコード(※Main.xlsmに記述して呼び出す)

Sub test()
Dim masterbook As Workbook
Dim Filepath As String

Filepath = ThisWorkbook.Path & "" & "master.xlsx"

If Dir(Filepath) = "" Then
MsgBox "指定したファイルは存在していません"

Exit Sub

End If

Set masterbook = Workbooks.Open(Filepath)

'マスタのデータ数をカウント
master_cnt = masterbook.Sheets("Master").Range("A1").CurrentRegion.Rows.Count

'メインのデータ数をカウント
main_cnt = ThisWorkbook.Sheets("main").Range("A1").CurrentRegion.Rows.Count

For i = 2 To main_cnt
'今回は、シンプルにワークシート関数であるmatch関数を使う(みつかった番号のとなりの値を取得)

検索値 = masterbook.Sheets("Master").Range("A" & i).Value 検索範囲 = masterbook.Sheets("Master").Range("A2:A" & master_cnt) セル番号 = WorksheetFunction.Match(検索値, 検索範囲, 0) ThisWorkbook.Sheets("main").Range("B" & セル番号 + 1).Value = masterbook.Sheets("Master").Range("B" & i).Value

Next

masterbook.Close

Set masterbook = Nothing

End Sub

投稿2020/04/24 07:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/04/24 07:36

変数の宣言も全部していませんのでよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2020/04/24 07:38

言い忘れましたが、同日フォルダにそれぞれのファイルがあるという 前提です。
退会済みユーザー

退会済みユーザー

2020/04/24 07:44 編集

はじめの表記がエクセル名、BOOk名が逆でした・・。
guest

0

本を買ってきて勉強して自分で作成するか、誰かにお金を払って教えてもらうか、作ってもらったらいかがでしょうか?
マクロや数式の知識があると便利なことがたくさんありますが、只でやってもらっても、今後の為になりませんよ。知識は買うものです。

投稿2020/04/24 03:47

sage

総合スコア1240

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

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

sage

2020/04/24 03:49

ちなみに私だったら、VBAは使わず、数式(vlookup)で解決します。調べれば簡単に解決できるはずです。
sage

2020/04/24 04:52

VBAに限らず、コンピューター言語を1つも知らないというのならば、どこかの教室に通うか、本を買って勉強するか、ある程度コンピューター言語を知っている知人に教えてもらうかして、変数、ループ処理など最低限の知識をつけないとマクロ化は難しいと思います。 基本ができているのならば、「マクロの記録」機能を使えばなんとかなると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問