都道府県穴埋めゲーム

tatsumaru77様
以前投稿した内容で転記の追加をしたいのですが、内容は別ファイルへの転記をB列の1行目から添付の内容をお願いします。A列の転記内容はそのままでいいです。
AA0000Z00001*
B列にはS列とU列の転記はなしです。
それとこのコードだと転記した後に、もう一度転記処理を行うと最初に転記したものが消えてしまいます。一度転記したものは消さずにその下から転記されるようにしたいです。A列B列も同じようにです。
自分で変更してみましたが、うまくいきません。
申し訳ありませんが、よろしくお願いいたします。

Public Sub 別ファイルへ転記()
Dim fpath As String
Dim wb As Workbook
Dim ws1 As Worksheet
Dim wb2 As Workbook
Dim ws2 As Worksheet
Dim maxrow1 As Long
Dim row1 As Long
Dim row2 As Long
Set ws1 = ActiveSheet
fpath = "C:\Users\t-tai\OneDrive\デスクトップ\図番\図番転記.xlsx"
Set wb2 = Nothing
For Each wb In Workbooks
If wb.Name = "図番転記.xlsx" Then
Set wb2 = wb
Exit For
End If
Next
If wb2 Is Nothing Then
Set wb2 = Workbooks.Open(fpath)
End If
Set ws2 = wb2.Worksheets(1)
ws2.Cells.ClearContents
row2 = 1
maxrow1 = ws1.Cells(Rows.Count, "C").End(xlUp).Row

For row1 = 13 To maxrow1
If ws1.Cells(row1, "A").Value = "○" Then
ws2.Cells(row2, "A").Value = ws1.Cells(row1, "C").Value & ws1.Cells(row1, "E").Value & ws1.Cells(row1, "K").Value & _
ws1.Cells(row1, "O").Value & ws1.Cells(row1, "S").Value & ws1.Cells(row1, "U").Value & "*"
row2 = row2 + 1
End If
Next

or row1 = 13 To maxrow1
If ws1.Cells(row1, "A").Value = "○" Then
ws2.Cells(row2, "B").Value = ws1.Cells(row1, "C").Value & ws1.Cells(row1, "E").Value & ws1.Cells(row1, "K").Value & _
ws1.Cells(row1, "O").Value & "*"
row2 = row2 + 1
End If
Next
End Sub

「エクセルvbaについて」の質問画像

A 回答 (6件)

>If ws1.Cells(row1, "A").Value <> "" Thenに変更しましたが、変わりはないです。



そうすると、そのマクロ自体が実行されていないように見えます。
1.A列の13行目(A13)に〇を設定する。

2.下記行にブレイクポイントを設定する。
If ws1.Cells(row1, "A").Value <> "" Then
3.マクロを実行する。

4.If ws1.Cells(row1, "A").Value <> "" Then
の行で止まることを確認する。

5.F8でステップ実行する。

6.その後、どうなりますか。
①ws2.Cells(row2, "A").Value = ws1.Cells 以下省略が実行される。
②上記の①は実行されない。

上記①②のどちらでしょうか。
    • good
    • 0
この回答へのお礼

申し訳ありません。
maxrow1 = 500の部分を20に変更してみると転記され、再度500に戻しても転記されました。余分なスペースがあったのでしょうか?
とりあえずできましたので、ありがとうございます。時間を取らせてしまい申し訳ありませんでした。

お礼日時:2024/03/02 23:17

不思議ですね。


確認1:
13行目のA列に○があるのに、
ws2.Cells(row2, "A").Value = ws1.Cells(row1, "C").Value 以下省略
が実行されない。

確認3:
If ws1.Cells(row1, "A").Value = "○" Then の○を
13行目のA列にコピペしても、変わらず。

上記で、通常は、転記条件が成立するはずでが、何らかの原因で
転記条件が成立しないようです。

A列が、○と空欄しかないという前提になりますが、
If ws1.Cells(row1, "A").Value = "○" Then の行を
If ws1.Cells(row1, "A").Value <> "" Then
に変えて実行してください。それで、どうなりますか。
それで、転記されるなら、A列の○が違っているか、A列の○の前後にスペースなどがあるかなどが考えられます。
    • good
    • 0
この回答へのお礼

If ws1.Cells(row1, "A").Value <> "" Thenに変更しましたが、変わりはないです。

お礼日時:2024/03/02 20:24

>頂いたコ-ドをを実行すると転記される側のファイルが開かれるのですが、>何も転記されません。

特にエラーになるわけでもないのですが。

考えられるのは、何かの原因により転記元のデータが転記対象になっていない。
ということです。

確認1:
当然の話ですが、転記元シート(Sheet1)の13行目以降に、
A列に○のついた行があるという前提です。
もし、ないなら、転記されません。

確認2:
①maxrow1 = 500 
②maxrow1 = ws1.Cells(Rows.Count, "C").End(xlUp).Row
のどちらを採用していますか?
もし、②を採用しているなら、①に変えてください。

確認3:
転記元の○が、提示したマクロの
If ws1.Cells(row1, "A").Value = "○" Then
の○と同じか確認してください。
マクロの○を転記元のA列にコピペしてから、マクロを実行すれば
必ず一致します。

上記の確認を行ってください。
    • good
    • 0
この回答へのお礼

確認1:転記元シート(Sheet1)の13行目以降に、
A列に○のついた行はありますが、一行ずつコードを動かすと下記のコードがスル-されます。
A列の13行目以降に〇があればここは実行されますよね?
ws2.Cells(row2, "A").Value = ws1.Cells(row1, "C").Value & ws1.Cells(row1, "E").Value & ws1.Cells(row1, "K").Value & _
ws1.Cells(row1, "O").Value & ws1.Cells(row1, "S").Value & ws1.Cells(row1, "U").Value
ws2.Cells(row2, "B").Value = ws1.Cells(row1, "C").Value & ws1.Cells(row1, "E").Value & ws1.Cells(row1, "K").Value & _
ws1.Cells(row1, "O").Value & "*"
row2 = row2 + 1

確認2:
①maxrow1 = 500 
②maxrow1 = ws1.Cells(Rows.Count, "C").End(xlUp).Row
①を使用しています。元々①から変更していません。

確認3:
転記元の○が、提示したマクロの
If ws1.Cells(row1, "A").Value = "○" Then
の○と同じか確認してください。
マクロの○を転記元のA列にコピペしてから、マクロを実行すれば
必ず一致します。
コピペして実行してみましたが変わりないです。

お礼日時:2024/03/02 17:39

追伸:


No2で、
①maxrow1 = 500 としていますが、
②maxrow1 = ws1.Cells(Rows.Count, "C").End(xlUp).Row
で問題なければ、②を採用してください。
前回の回答の時、②でエラーが発生するので、①にしてあります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
頂いたコ-ドをを実行すると転記される側のファイルが開かれるのですが、何も転記されません。特にエラーになるわけでもないのですが。

お礼日時:2024/03/02 10:49

失礼しました。

No1は無視してください。
こちらが正しいです。
Option Explicit

Public Sub 別ファイルへ転記()
Dim fpath As String
Dim wb As Workbook
Dim ws1 As Worksheet
Dim wb2 As Workbook
Dim ws2 As Worksheet
Dim maxrow1 As Long
Dim row1 As Long
Dim row2 As Long
Set ws1 = ThisWorkbook.Worksheets("Sheet1")
fpath = "C:\Users\t-tai\OneDrive\デスクトップ\図番\図番転記.xlsx"
Set wb2 = Nothing
For Each wb In Workbooks
If wb.Name = "図番転記.xlsx" Then
Set wb2 = wb
Exit For
End If
Next
If wb2 Is Nothing Then
Set wb2 = Workbooks.Open(fpath)
End If
Set ws2 = wb2.Worksheets(1)
row2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row
If ws2.Cells(row2, "A").Value <> "" Then
row2 = row2 + 1
End If
maxrow1 = 500
For row1 = 13 To maxrow1
If ws1.Cells(row1, "A").Value = "○" Then
ws2.Cells(row2, "A").Value = ws1.Cells(row1, "C").Value & ws1.Cells(row1, "E").Value & ws1.Cells(row1, "K").Value & _
ws1.Cells(row1, "O").Value & ws1.Cells(row1, "S").Value & ws1.Cells(row1, "U").Value & "*"
ws2.Cells(row2, "B").Value = ws1.Cells(row1, "C").Value & ws1.Cells(row1, "E").Value & ws1.Cells(row1, "K").Value & _
ws1.Cells(row1, "O").Value & "*"
row2 = row2 + 1
End If
Next
End Sub
    • good
    • 0
この回答へのお礼

申し訳ございません。
maxrow1 = 500を一度20に変更してみたら転記できました。
その後500に戻しても実行できたので問題ありません。
時間を取らせてしまい申し訳ありませんでした。
ありがとうございます。

お礼日時:2024/03/02 22:39

前回のは破棄してください。



Option Explicit

Public Sub 別ファイルへ転記()
Dim fpath As String
Dim wb As Workbook
Dim ws1 As Worksheet
Dim wb2 As Workbook
Dim ws2 As Worksheet
Dim maxrow1 As Long
Dim row1 As Long
Dim row2 As Long
Set ws1 = ThisWorkbook.Worksheets("Sheet1")
fpath = "C:\Users\t-tai\OneDrive\デスクトップ\図番\図番転記.xlsx"
fpath = "D:\goo\data9\図番転記.xlsx"
Set wb2 = Nothing
For Each wb In Workbooks
If wb.Name = "図番転記.xlsx" Then
Set wb2 = wb
Exit For
End If
Next
If wb2 Is Nothing Then
Set wb2 = Workbooks.Open(fpath)
End If
Set ws2 = wb2.Worksheets(1)
row2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row
If ws2.Cells(row2, "A").Value <> "" Then
row2 = row2 + 1
End If
maxrow1 = 500
For row1 = 13 To maxrow1
If ws1.Cells(row1, "A").Value = "○" Then
ws2.Cells(row2, "A").Value = ws1.Cells(row1, "C").Value & ws1.Cells(row1, "E").Value & ws1.Cells(row1, "K").Value & _
ws1.Cells(row1, "O").Value & ws1.Cells(row1, "S").Value & ws1.Cells(row1, "U").Value & "*"
ws2.Cells(row2, "B").Value = ws1.Cells(row1, "C").Value & ws1.Cells(row1, "E").Value & ws1.Cells(row1, "K").Value & _
ws1.Cells(row1, "O").Value & "*"
row2 = row2 + 1
End If
Next
End Sub
    • good
    • 0

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


おすすめ情報