dポイントプレゼントキャンペーン実施中!

ExcelのVBA初心者です。

ファイル1の中から特定の文字列を探して、ファイル2にあるユニークキーを上から順番に結合もしくは置換するVBAをご教授いただきたいです。

ファイル1:ExcelでA列のみに文字列が入っている
      途中で空白セルもある
      最終行は毎回変わる

ファイル2:Excel CSV ファイル (.csv)でA列にユニークキーがある
      その他の列にも文字列が入っているが必要なのはA列のみ
      最終行は毎回変わる

ファイル1の特定の文字列:https://test/test=
結合or置換後の文字列:https://test/test=ユニークキー
但し、既にユニークキーと結合されて完成されているもの(最初から「https:/test/=ユニークキー」になっている)はそのままにしたいです

反映対象の特定の文字列「https://test/test=」は作業の度に数が変わります
※ファイル②のユニークキーの数とは完全一致します

ファイル2のユニークキーは上から順番に反映すればOKです

どうぞよろしくお願いいたします。

「Excel マクロ VBA 特定の文字列」の質問画像

質問者からの補足コメント

  • 質問ありがとうございます。

    >ファイル1の『特定の文字列』とはファイル内でどのように判断するのでしょう?(先に指定をするのでしょうかね?)
    →『特定の文字列』は毎回固定で変わりません。どのように判断するか?まで考えられていませんでしたが、先に指定するでも問題ございません。

    >また同一ファイル内ならば『全て同じ文字列』とみなして良いのか否か・・・?
    →『全て同じ文字列』とみなして良いです。(細かく言えば同一シートです)

    >※ファイル②のユニークキーの数とは完全一致します
    この回数で判断できそうですが、個数が完全一致とは
    >但し、既にユニークキーと結合されて完成されているものも
    含む or 含まない?
    →既にユニークキーと結合されて完成されているものは含まないです。

    あまりよくわかっていない状態で質問してしまって恐縮です。
    どうぞよろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/06/17 09:03
  • 質問ありがとうございます。

    反映対象の特定の文字列「https://test/test=」がファイル②のユニークキーの数と完全一致するのですがそちらで判断を持たせることは可能でしょうか?
    NO.2の回答への補足にも書きましたが、
    既にユニークキーと結合されて完成されているものは含まない数です。

    あまりよくわかっていない状態で質問してしまって恐縮です。
    どうぞよろしくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/06/17 09:14
  • 丁寧にありがとうございます。

    >>途中で空白セルもある
    >ということですが、空白なのが2行や3行、それ以上と言うことは無いのでしょうか?
    →確認した結果最大4行でした。

    >そもそも、ファイル1のデータはどのように作成され、
    →別にマスタシートがあり、作業用シート(これが種類別に10種類)へVLOOKUPで反映、さらに必要列を別シートへコピーしたものがファイル1の該当シートになります。

    >「ファイル②のユニークキーの数とは完全一致します」は確実に保証されるのでしょうか。
    →こちらは保証されてます。(既にユニークキーと結合されて完成されているものは含まない数です)

    >やりたいこととして、何行あるか分からない前提では、
    →すみません、毎回行数は変動するものの最大でも200行で収まると思います。

    (続きます)

    No.3の回答に寄せられた補足コメントです。 補足日時:2020/06/17 11:47
  • (続きです)
    >また、ファイルを1と2を使っていますが、余計な処理が入りますので、まずはファイル1と2ではなく、シートで分ける様にされたらどうでしょう。
    →アドバイスありがとうございます、ファイル2なのですが、作業する度に外部ツールからCSV ファイル (.csv)にてダウンロードしています。ファイル1にシートを移動させても問題ございません。

    >また、プログラミングになれない時は、フローチャートまでいかないにせよ、
    >上記の様に言葉で書き出して整理すると問題点も見つかりやすいです。
    >この際、具体的な処理はコーディングでしますので、言葉で簡単に書くようにします。
    →ありがとうございます。一度整理することが大事ですね。今後はVBAを書く前に整理して処理を書き出したいと思います。

      補足日時:2020/06/17 11:52

A 回答 (5件)

ここまで分かれば何とかなりそう?


いちお、主要部分のコードだけ参考までに。

Sheet1にファイル1のデータが、Sheet2にファイル2のデータが
記載されていること前提としています。
また、行数は不明ながら上限200くらいとのこと、ちょっと余裕をみて
250としています。

最後に大事なところですが、それ以外の宣言次第で、コピペしても動かないハズ。
適当になおしてくださいw

最後に、以下のサイトはしっていますか?
たくさんサンプルがありますし、私も今でも時々参考にしています。
https://www.moug.net/

では頑張ってください!

+++++++++++++++++++++++++++++++++++++++++++
Const FixStr = "https://test/test=" '固定文字列の定数
Const RowMax = 250 '最大行数を250行と仮定


n = 0
c = 2

'A列が空白か
For i = 1 To RowMax If Sheet1.Cells(i, 1).Values = "" Then
n = n + 1 '空白カウンタをカウントアップ
If n >= 5 Then '空白カウンタが5以上(5行続いた)
Exit For 'ループを抜ける(処理終了)
End If
End If
'A列が固定文字と一緒
If Sheet1.Cells(i, 1).Values = FixStr Then
'固定文字列とSheet2の文字を結合し格納
Sheet1.Cells(i, 1).Values = Sheet1.Cells(i, 1).Values & Sheet2.Cells(c, 1).Values
c = c + 1 'Sheet2行数カウンタをカウントアップ
End If
Next
++++++++++++++++++++++++++++++++++++++++++++
    • good
    • 1
この回答へのお礼

ご連絡が遅くなり申し訳ございません。
紆余曲折ありましたが、希望する仕様での実装ができました…(泣)
いろいろとご指導いただきありがとうございました!

お礼日時:2020/06/29 16:32

確かにCSVファイルのままよりかは同じBookの別シートに取り込んだ方がセル範囲を定め配列変数に値を放り込むだけで、配列のインデックスNoの最大値をループ終了の条件に出来ますね。


勉強になります。

ぶっちゃけCSVファイルからフィールド『ユニークキー(?)』の値をADOで取り出そうかとも思いましたが、多分無駄にコードが長くなりそうでどうしたものかと思ってました。
    • good
    • 0

ええと、


>途中で空白セルもある
ということですが、空白なのが2行や3行、それ以上と言うことは無いのでしょうか?

そもそも、ファイル1のデータはどのように作成され、「ファイル②のユニークキーの数とは完全一致します」は
確実に保証されるのでしょうか。
例えば、300行あろうが1万行あろうが。

やりたいこととして、何行あるか分からない前提では、

・無限ループ
 ・ループを抜ける判定
 ・A列の文字列が「https://test/test=」と一致するか
  ・一致すれば
   ・ファイル2から一致カウンタの文字列取得
   ・一致カウンタをカウントアップ
   ・ファイルAの該当箇所の文字列を書き換え
  ・一致しなければ何もしない
・ループ終了

といった感じになるとおもいますが、重要なのはループを抜ける判定です。

また、ファイルを1と2を使っていますが、余計な処理が入りますので、まずはファイル1と2ではなく、
シートで分ける様にされたらどうでしょう。

また、プログラミングになれない時は、フローチャートまでいかないにせよ、
上記の様に言葉で書き出して整理すると問題点も見つかりやすいです。
この際、具体的な処理はコーディングでしますので、言葉で簡単に書くようにします。
この回答への補足あり
    • good
    • 0

ファイル1の『特定の文字列』とはファイル内でどのように判断するのでしょう?(先に指定をするのでしょうかね?)


また同一ファイル内ならば『全て同じ文字列』とみなして良いのか否か・・・?

ファイル1の最終行って、

>※ファイル②のユニークキーの数とは完全一致します

この回数で判断できそうですが、個数が完全一致とは

>但し、既にユニークキーと結合されて完成されているもの

も含む or 含まない?
この回答への補足あり
    • good
    • 0

ファイル1の終端行の判断ができないと思いますが。

この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!