あるスプレットシートが既にあり,そこにTextファイルから下記のようなデータをコピーしたいのですがよくできません。データが同じように並んでいて、Aの90という数値を検索したいと思っています。取得するデータはData2にあるAからDのデータを丸ごとコピー&ペイストしたいのです。ペイストするときには、スペースとコンマで区切りを付けてペーストしたいと思っております。
Data1
A 90, B -23.3, C 0.5, D 9
A 90, B -42.5, C 0.4, D 9
A 45, B -21.6, C 0.25, D 9
A 90, B 23.5, C 0.7, D 9
Data2
A 90, B -23.3, C 0.5, D 9
A 90, B -42.5, C 0.4, D 9
A 45, B -21.6, C 0.25, D 9
A 90, B 23.5, C 0.7, D 9
ネットに載っているのをいろいろ試しましたが、すべてのセルに検索がかかり使えませんでした(アレンジできませんでした)。
どうぞよろしくお願いいたします。
No.3
- 回答日時:
> Data2のところがもし”Row Data 2”となっている場合。
If InStr(lineBuf, "Data2") <> 0 Then のところはIf InStr(lineBuf, "Row Data 2") <> 0 Then で良いと思います。
> ary = Split(lineBuf, " ") 'lineBufをスペースで分割する。
> If ary(1) = strFind Then 'Aの次の数字が検索文字ならば
>
> のary(1)はどこを指しているのでしょうか。”A”と簡単にしてましたが、実際は文字が入り”Act"です。
> また”lineBuf”もどこを指しているのでしょうか?
linBuf は、ファイルから読み取った一行分のデータです。
(Line Input #fileNo, lineBuf で読み取っています)
ary(1)については、例えば lineBuf = "A 90, B -23.3, C 0.5, D 9" だとすると。
ary = Split(lineBuf, " ")
によって、スペース(" ")によって分割された要素がary(n)に代入されるので、
ary(0) = "A"
ary(1) = "90,"
ary(2) = "B"
……
ary(7) = "9"
となります。
従ってary(1)は、Aの次の数値+カンマになります。
No.2
- 回答日時:
補足いただいた内容に即して変更してみました。
・ファイルをダイアログで選択
・検索文字列(数字)を入力させる
・適合した行を空白で分割し、カンマを削除後、A列からH列に書き込む
----------------------------------
Sub aaa()
Dim textFile As String
Dim strFind As String
Dim isData2 As Boolean: isData2 = False
Dim targetCell As Range, target As Range
Dim fileNo As Long
Dim lineBuf As String
Dim ary As Variant, e As Variant
textFile = Application.GetOpenFilename("Log File (*.log),*.log", 1, "Select LOG File")
If textFile = "False" Then
Exit Sub 'ファイル選択キャンセル時は終了
End If
strFind = InputBox("Input number(s)") ' 検索文字列入力
strFind = strFind & "," ' カンマ追加
Set targetCell = Range("A1") 'ペースト開始セル
fileNo = FreeFile()
Open textFile For Input As #fileNo
Do Until EOF(fileNo)
Line Input #fileNo, lineBuf
If Not isData2 Then 'Data1部分は無視
If InStr(lineBuf, "Data2") <> 0 Then
isData2 = True
End If
Else 'Data2部分
Set target = targetCell
ary = Split(lineBuf, " ") 'lineBufをスペースで分割する。
If ary(1) = strFind Then 'Aの次の数字が検索文字ならば
For Each e In ary '分割した要素一つひとつについて
If right(e, 1) = "," Then '右端がカンマなら削除
e = left(e, Len(e) - 1)
End If
target.Value = e 'セルに書きこみ
Set target = target.Offset(0, 1) 'セルを一つ右へ
Next
Set targetCell = targetCell.Offset(1, 0) 'セルを一つ下へ移動
End If
End If
Loop
Close #fileNo
End Sub
ありがとうございました。原因がわかりました。
データがこのようになっていました。解決方法はありますか?
Data1
A 0.00, B -23.3, C 0.5, D 9
A 90.00, B -42.5, C 0.4, D 9
A 45.00, B -21.6, C 0.25, D 9
A 90.00, B 23.5, C 0.7, D 9
Data2
A 0.00, B -23.3, C 0.5, D 9
A 0.00, B -42.5, C 0.4, D 9
A 45.00, B -21.6, C 0.25, D 9
A 0.00, B 23.5, C 0.7, D 9
Data2
A 90.00, B -23.3, C 0.5, D 9
A 90.00, B -42.5, C 0.4, D 9
A 45.00, B -21.6, C 0.25, D 9
A 90.00, B 23.5, C 0.7, D 9
No.1
- 回答日時:
仕様がいまひとつ理解できなかったので、間違っていたらゴメンなさい。
以下の動作をします。
・指定のテキストファイルを開き、一行ずつ読み込む
・「Data2」行までは何もしないで読み捨てる。
・「検索文字列」で始まる行があったら、順にA1セルから下に向かってペーストする。
質問欄のデータですとA1~A3セルにData2の”A 90"で始まる3行が書き込まれます。
--------------------------------------------------
Sub aaa()
Dim textFile As String
Dim strFind As String
Dim isData2 As Boolean: isData2 = False
Dim targetCell As Range
Dim fileNo As Long
Dim lineBuf As String
textFile = ThisWorkbook.Path & "\sample.txt" 'テキストファイル
strFind = "A 90" ' 検索文字列
strFind = strFind & "," 'カンマを追加
Set targetCell = Range("A1") 'ペースト開始セル
fileNo = FreeFile()
Open textFile For Input As #fileNo
Do Until EOF(fileNo)
Line Input #fileNo, lineBuf
If Not isData2 Then 'Data1部分は無視
If InStr(lineBuf, "Data2") <> 0 Then
isData2 = True
End If
Else 'Data2部分
If InStr(lineBuf, strFind) = 1 Then '検索文字列で始まる行ならば
targetCell.Value = lineBuf
Set targetCell = targetCell.Offset(1, 0) 'セルを一つ下へ移動
End If
End If
Loop
Close #fileNo
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Visual Basic(VBA) 集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付け 4 2022/08/18 15:24
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Excel(エクセル) エクセルでフィルタ後、考えている場所に値コピーができない。 1 2022/05/02 21:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Excel(エクセル) EXCELで参照したデータを検索したい。 2 2023/01/18 13:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで丸をつけたいです。
-
エクセルVBA(実行時エラー438...
-
EXCELマクロ 保護されているシ...
-
エクセルテキストボックスの文...
-
Excelについて
-
データが入力されている隣のセ...
-
VBAについて教えてください。 E...
-
エクセルVBA セル選択後にカレ...
-
ダブルクリックすると現在の時...
-
Excel VBA セルを指定個数ラン...
-
Swing 編集不可でも選択可能なJ...
-
セル色を5秒間隔で変える
-
Windowsで動くVBAがmacOSで動か...
-
エクセル マクロ 見つけてセ...
-
VBAで、貼り付け禁止命令を実現...
-
エクセル2007 VBA DTPicker
-
シート内セルに着色があればエ...
-
Excel VBAで結合されたセルの数
-
エクセルのVBAでダブルクリック...
-
GrapeCityのSpreadの複数セルの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データが入力されている隣のセ...
-
EXCELマクロ 保護されているシ...
-
エクセルテキストボックスの文...
-
VBAで、貼り付け禁止命令を実現...
-
Excelについて
-
メッセージを1度だけ表示したい。
-
ダブルクリックすると現在の時...
-
ハイパーリンクされているファ...
-
エクセルVBA セル選択後にカレ...
-
Jtableの特定のセルの背景色や...
-
VBAで丸をつけたいです。
-
エクセルVBA(実行時エラー438...
-
Excelのセル内にある図形を削除...
-
Swing 編集不可でも選択可能なJ...
-
(VBA)アクティブセルを起点に...
-
Excel VBA セルを指定個数ラン...
-
VBA セルに合わせて移動するが...
-
Windowsで動くVBAがmacOSで動か...
-
セル色を5秒間隔で変える
-
Excel VBA ダブルクリックで入...
おすすめ情報
siffon9さんありがとうございます。説明不足で済みません。検索はA 90ではなく任意の数字でした。InputBoxに数字(ここでは90ですが、好きな数字)のみ入れて数値を検索したいのです。下記を入れましたがうまくいきませんでした
s = InputBox("Input number(s)")
CurDir ("C:\")
textFile = Application.GetOpenFilename("Log File (*.log),*.log", 1, "Select LOG File")
If (textFile <> "False") Then
If (Trim(Dir(textFile)) = "") Then
Call MsgBox("Missing Log file", vbOKOnly, "OK")
Else
strFind = "*" & s & "*" ' 検索文字列
結果こうなってくれればありがたいのですが、うまくいきません。どうぞよろしくお願いいたします。
必要なものを足してみたのですがだめです。何かだめかお分かりになりますでしょうか?
まずは、Splitなしの貼り付けだけ。
ありがとうございます。 もう2つお聞きしてよろしいですか? 実際のファイルは複雑で数値が多様にあります。そこで質問ですが、Data2のところがもし”Row Data 2”となっている場合。If InStr(lineBuf, "Data2") <> 0 Then のところは If InStr(lineBuf, "Row Data 2") <> 0 Thenでしょうか。それとも、If InStr(lineBuf, "Row”, "Data", "2") <> 0 Then でしょうか それとも、If InStr(lineBuf, "Row” &"Data" & "2") <> 0 Thenでしょうか? 、
もう一つは
ary = Split(lineBuf, " ") 'lineBufをスペースで分割する。
If ary(1) = strFind Then 'Aの次の数字が検索文字ならば
のary(1)はどこを指しているのでしょうか。”A”と簡単にしてましたが、実際は文字が入り”Act"です。
また”lineBuf”もどこを指しているのでしょうか? お答えできれば幸いです。ありがとうございます。
ありがとうございます。いろいろファイルの違うものに変更すると、
If ary(1) = strFind Then でまだ、「型が一致しません」のエラーがでています。
aryなのでTextファイルでは共通だと思うのですが、型が一致しないのは、おそらくデータがDのほかにたくさんあるからだと思っています。しかし解決方法がネットでも見つかりません。うまい解決法はあるのでしょうか? すみません。
ありがとうございます。いろいろファイルの違うものに変更すると、
If ary(1) = strFind Then でまだ、「型が一致しません」のエラーがでています。
aryなのでTextファイルでは共通だと思うのですが、型が一致しないのは、おそらくデータがDのほかにたくさんあるからだと思っています。しかし解決方法がネットでも見つかりません。うまい解決法はあるのでしょうか? すみません。