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です
どうぞよろしくお願いいたします。
No.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
++++++++++++++++++++++++++++++++++++++++++++
ご連絡が遅くなり申し訳ございません。
紆余曲折ありましたが、希望する仕様での実装ができました…(泣)
いろいろとご指導いただきありがとうございました!
No.4
- 回答日時:
確かにCSVファイルのままよりかは同じBookの別シートに取り込んだ方がセル範囲を定め配列変数に値を放り込むだけで、配列のインデックスNoの最大値をループ終了の条件に出来ますね。
勉強になります。
ぶっちゃけCSVファイルからフィールド『ユニークキー(?)』の値をADOで取り出そうかとも思いましたが、多分無駄にコードが長くなりそうでどうしたものかと思ってました。
No.3
- 回答日時:
ええと、
>途中で空白セルもある
ということですが、空白なのが2行や3行、それ以上と言うことは無いのでしょうか?
そもそも、ファイル1のデータはどのように作成され、「ファイル②のユニークキーの数とは完全一致します」は
確実に保証されるのでしょうか。
例えば、300行あろうが1万行あろうが。
やりたいこととして、何行あるか分からない前提では、
・無限ループ
・ループを抜ける判定
・A列の文字列が「https://test/test=」と一致するか
・一致すれば
・ファイル2から一致カウンタの文字列取得
・一致カウンタをカウントアップ
・ファイルAの該当箇所の文字列を書き換え
・一致しなければ何もしない
・ループ終了
といった感じになるとおもいますが、重要なのはループを抜ける判定です。
また、ファイルを1と2を使っていますが、余計な処理が入りますので、まずはファイル1と2ではなく、
シートで分ける様にされたらどうでしょう。
また、プログラミングになれない時は、フローチャートまでいかないにせよ、
上記の様に言葉で書き出して整理すると問題点も見つかりやすいです。
この際、具体的な処理はコーディングでしますので、言葉で簡単に書くようにします。
No.2
- 回答日時:
ファイル1の『特定の文字列』とはファイル内でどのように判断するのでしょう?(先に指定をするのでしょうかね?)
また同一ファイル内ならば『全て同じ文字列』とみなして良いのか否か・・・?
ファイル1の最終行って、
>※ファイル②のユニークキーの数とは完全一致します
この回数で判断できそうですが、個数が完全一致とは
>但し、既にユニークキーと結合されて完成されているもの
も含む or 含まない?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでPowerPointからExcelにレイアウト通りに出力する 4 2023/07/05 12:22
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) excelにて、特定の列に数字入力してあれば、入力してある行コピーして 別ファイルに張り付ける 2 2022/08/11 05:33
- Visual Basic(VBA) エクセルVBA 4 2022/05/14 00:51
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
C言語関数違いについて。
-
Javascript で INI の読み書き
-
HANDLE無効について
-
2つのCSVファイルの比較
-
mingwのライブラリ形式はVisual...
-
画像読み込み時のOutOfMemory
-
dataファイルをxtxファイルにす...
-
テキストファイルの最終行を削...
-
tatsumaru77様 昨日回答して頂...
-
ダイアログ上でファイルドラッ...
-
Excelマクロでの再読込み方法
-
iniファイルのデータ結合に関す...
-
ディレクトリ内のファイル名取得
-
ハッシュの計算時間について
-
同じ名前のファイルを作った場...
-
分割コンパイルの#defineについて
-
アプリケーション終了時例外エ...
-
fprintfで文字化け
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
CSVファイルへの保存の際、デー...
-
SGファイルって何ですか?
-
大きいサイズのテキストファイ...
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
グローバル変数のよくない使い...
-
iniファイルに追記がしたいです。
-
Excelマクロでの再読込み方法
-
C言語のfopenについて教えてく...
-
ハッシュの計算時間について
-
Javascript で INI の読み書き
-
VBAにてEXCEL以外のファイル(テ...
-
ASP .NETでファイル選択ダイア...
-
同じ名前のファイルを作った場...
-
fopenできる上限の変更
おすすめ情報
質問ありがとうございます。
>ファイル1の『特定の文字列』とはファイル内でどのように判断するのでしょう?(先に指定をするのでしょうかね?)
→『特定の文字列』は毎回固定で変わりません。どのように判断するか?まで考えられていませんでしたが、先に指定するでも問題ございません。
>また同一ファイル内ならば『全て同じ文字列』とみなして良いのか否か・・・?
→『全て同じ文字列』とみなして良いです。(細かく言えば同一シートです)
>※ファイル②のユニークキーの数とは完全一致します
この回数で判断できそうですが、個数が完全一致とは
>但し、既にユニークキーと結合されて完成されているものも
含む or 含まない?
→既にユニークキーと結合されて完成されているものは含まないです。
あまりよくわかっていない状態で質問してしまって恐縮です。
どうぞよろしくお願いいたします。
質問ありがとうございます。
反映対象の特定の文字列「https://test/test=」がファイル②のユニークキーの数と完全一致するのですがそちらで判断を持たせることは可能でしょうか?
NO.2の回答への補足にも書きましたが、
既にユニークキーと結合されて完成されているものは含まない数です。
あまりよくわかっていない状態で質問してしまって恐縮です。
どうぞよろしくお願いいたします。
丁寧にありがとうございます。
>>途中で空白セルもある
>ということですが、空白なのが2行や3行、それ以上と言うことは無いのでしょうか?
→確認した結果最大4行でした。
>そもそも、ファイル1のデータはどのように作成され、
→別にマスタシートがあり、作業用シート(これが種類別に10種類)へVLOOKUPで反映、さらに必要列を別シートへコピーしたものがファイル1の該当シートになります。
>「ファイル②のユニークキーの数とは完全一致します」は確実に保証されるのでしょうか。
→こちらは保証されてます。(既にユニークキーと結合されて完成されているものは含まない数です)
>やりたいこととして、何行あるか分からない前提では、
→すみません、毎回行数は変動するものの最大でも200行で収まると思います。
(続きます)
(続きです)
>また、ファイルを1と2を使っていますが、余計な処理が入りますので、まずはファイル1と2ではなく、シートで分ける様にされたらどうでしょう。
→アドバイスありがとうございます、ファイル2なのですが、作業する度に外部ツールからCSV ファイル (.csv)にてダウンロードしています。ファイル1にシートを移動させても問題ございません。
>また、プログラミングになれない時は、フローチャートまでいかないにせよ、
>上記の様に言葉で書き出して整理すると問題点も見つかりやすいです。
>この際、具体的な処理はコーディングでしますので、言葉で簡単に書くようにします。
→ありがとうございます。一度整理することが大事ですね。今後はVBAを書く前に整理して処理を書き出したいと思います。