ちょっと変わったマニアな作品が集結

A.xlsmというファイルに下記のような、CSVを開いて1行ずつチェックし、A.xlsmに条件に合う行をコピー&ペーストし、条件に合わない場合はA.xlsmの空白になる1行を削除するプログラムを書いています(プロシージャの中の抜粋です)。
A.xlsmのWSというワークシートの1行目には、画像のようにデータの見出しを記述しており、J1にも元々はコード2という見出しをつけているのですが、マクロを実行すると画像のようにコード2という名前がhahaha24というコードの中身に書き換わってしまい困惑しています。

このプログラムのどこかが、そうさせているのでしょうか?それともこのプログラムとは別のどこかで書き換わっているのでしょうか(このチェックするプログラムを追加する前は見出しは書き換わっていなかったと記憶しています。)?
ご教示よろしくお願い致します。


Dim ws As Worksheet
Set ws = Workbooks("A.xlsm").Worksheets("WS")
Dim copyI As Long
copyI = 2
Dim count As Long
count = 0
Dim firstLine As Long
Dim varFileName As Variant
Dim ws As WorksheetSet ws = ThisWorkbook.Worksheets(1)
varFileName = dCsv
If varFileName = False Then
Exit Sub
End If
Workbooks.Open Filename:=varFileName

firstLine = ws.Cells(Rows.count, "A").End(xlUp).Row

DoEvents
With CreateObject("VBScript.RegExp")
.Pattern = "aaa|bbb|ccc|"
Do While ActiveWorkbook.Worksheets(1).Cells(copyI, 1).Value <> ""

Dim Rng As Range

Set Rng = ws.Columns(1).Find(What:=ActiveWorkbook.Worksheets(1).Cells(copyI, 1).Value, LookIn:=xlValues, LookAt:=xlWhole)
If Rng Is Nothing _
And ActiveWorkbook.Worksheets(1).Cells(copyI, 1).Value = 1 _
And ActiveWorkbook.Worksheets(1).Cells(copyI, 2).Value = "Yes" _
And ActiveWorkbook.Worksheets(1).Cells(copyI, 3).Value = "Yes" _
And ActiveWorkbook.Worksheets(1).Cells(copyI, 4).Value = "Yes" _
And Not .test(ActiveWorkbook.Worksheets(1).Cells(copyI, 5)) _
And Not .test(ActiveWorkbook.Worksheets(1).Cells(copyI, 7)) Then
ActiveWorkbook.Worksheets(1).Rows(copyI).Copy
ws.Rows(firstLine + 1 - count).PasteSpecial (xlPasteAll)
Else
ws.Cells(firstLine + 1).Rows.Delete
count = count + 1
End If
copyI = copyI + 1
firstLine = firstLine + 1
Loop
End With
Application.ScreenUpdating = True

「VBAでのペーストが予想外の場所に行われ」の質問画像

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

  • へこむわー

    | A  | B | C | D |E|F  |G  | H | I  |  J  | K | L 
    1|ID  |ID2 |ID3 |URL|名|姓 |詳細 |詳細2|コード|hahaha24|内訳|C
    2|123|456|TTT|http|鎌|鈴木|AAAA|500g|   |hahaha25|1 |C

    大きい画像をアップロードしたのですが見づらかったので打ち込んでみました。
    こちらも見づらくてすみません・・。

    「VBAでのペーストが予想外の場所に行われ」の補足画像1
      補足日時:2020/09/19 00:39

A 回答 (2件)

検証も出来ない初級者ですが気になった点を。


(1個しか見つけられない未熟者ですが)

Dim ws As Worksheet
Set ws = Workbooks("A.xlsm").Worksheets("WS")



>Dim ws As WorksheetSet ws = ThisWorkbook.Worksheets(1)

多分質問を書き込む際、

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)

改行がキチンとされなかった?
にしても変数:ws は何を格納したいのでしょうか?
    • good
    • 0
この回答へのお礼

ああ・・すみません。
Dim ws2 As Worksheet
Set ws2 = ThisWorkbook.Worksheets(1)
の間違いです・・

お礼日時:2020/09/19 13:18

補足の画像や文章を見ても、



>And ActiveWorkbook.Worksheets(1).Cells(copyI, 1).Value = 1 _
 And ActiveWorkbook.Worksheets(1).Cells(copyI, 2).Value = "Yes" _
 And ActiveWorkbook.Worksheets(1).Cells(copyI, 3).Value = "Yes" _
 And ActiveWorkbook.Worksheets(1).Cells(copyI, 4).Value = "Yes" _

これって成立する内容なの?
それに

>And Not .test(ActiveWorkbook.Worksheets(1).Cells(copyI, 5))

5列目の判定は不要な気もしますけど。
    • good
    • 0
この回答へのお礼

条件は成立します。
そして5列目の判定は必要です。

ws.Cells(firstLine + 1).Rows.Delete
がおかしな挙動にさせていたようです。
その解決方法は分かりませんでしたが、そもそも不要な行だったので削除したところ、意図する動きをするようになりました。
あるがとうございました。

お礼日時:2020/09/19 20:22

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング