いつも御世話になっております。
以下のことをしたいのですが、詰まってしまいました。
皆様の力をお借りしたいと思い、書き込ませていただきます。
・ボタン1をクリックすると、base(転記元)のG列に書かれた事項と同一のシート(転記先)へ転記する(各シートA,B,Cへ転記)
・転記先のE列を見て、既存のものであれば、上書きする
・転記先のE列を見て、新規のものであれば、空いている行を探し転記する。
(例)
base(転記元シート)
E1|F1|G1
名前収入シート先
月曜50A
火曜100A
木曜150C
土曜50A
日曜100B
水曜150A
金曜10C
転記実行前
A(転記先シート)
E1|F1|G1
名前収入シート先
月曜A
火曜A
土曜A
転記実行後
A(転記先シート)
E1|F1|G1
名前収入シート先
月曜50A
火曜100A
土曜50A
水曜150A
以下に作成したプログラムを記述します。
が、IF文に関するエラーが生じております。
Sub ボタン1_Click()
Dim dstSheet As Worksheet
Dim srcRow As Long
Dim dstRow As Long
Dim name As Integer
Dim obj As Object
Set srcSheet = Sheets("base")
For srcRow = 2 To srcSheet.Range("G" & Rows.Count).End(xlUp).Row '元シートのデータ範囲で繰り返し(シート先は必須なのでG列でチェック)
If srcSheet.Range("G" & srcRow).Value <> "" Then '(転記先シート名)が空白でない場合に実行(1)
Set dstSheet = Sheets(srcSheet.Range("G" & srcRow).Value) 'シート取得(1)
name = Sheets(srcSheet.Range("E" & srcRow).Value) '名前を取得(1)
Set obj = Worksheets(dstSheet).Cells.Find(name) '名前を転記先の中で検索(1)
End If '(1)の終了
If obj Is Nothing Then '検索でかからなかったら、新たに空白の行を見つけて転記元から転記先へ転記する(3)
'以下3行問題点????
dstRow = dstSheet.Range("G" & Rows.Count).End(xlUp).Row + 1 '転記先行取得
If dstSheet.Range("E2") = "" Then dstRow = 1 '質問で転記先には1行目からなので、それに対応
dstSheet.Range("E" & dstRow).Resize(1, 3).Value = srcSheet.Range("E" & srcRow).Resize(1, 3).Value 'データ転記
End If
Else '検索でかかったら、該当の行のアドレスを割り出し、特定の範囲を上書きする。(4)
lngYLine = obj.Row
intXLine = obj.Column
With Sheets(dstSheet) '検索でかかったら、該当の行のアドレスを割り出し、特定の範囲を上書きする。(4)
dstSheet.Range("E" & lngYLine).Resize(1, 3).Value = srcSheet.Range("E" & srcRow).Resize(1, 3).Value 'データ転記(4)
End If '(3),(4)の終了
Set obj = Nothing 'Objの初期化
Next
End Sub
No.4ベストアンサー
- 回答日時:
前回の続きみたいですね。
提示のコードはあちこちミスがあり(^^;;;
それらをいちいち文言で指摘するのがちょと面倒なので
訂正加筆したコードをアップします。
以下をコピペして実行してみてください。
'-----------------------------------------
Sub ボタン1_Click()
Dim srcSheet As Worksheet
Dim dstSheet As Worksheet
Dim srcRow As Long
Dim dstRow As Long
Dim name As String
Dim obj As Range
Set srcSheet = Sheets("Base")
For srcRow = 2 To srcSheet.Range("G" & Rows.Count).End(xlUp).Row
If srcSheet.Range("G" & srcRow).Value <> "" Then
Set dstSheet = Sheets(srcSheet.Range("G" & srcRow).Value)
name = srcSheet.Range("E" & srcRow).Value
Set obj = dstSheet.Range("E:E").Find(name, , xlValues, xlWhole)
If obj Is Nothing Then
dstRow = dstSheet.Range("G" & Rows.Count).End(xlUp).Row + 1
If dstSheet.Range("E1") = "" Then
dstRow = 1
End If
dstSheet.Range("E" & dstRow).Resize(1, 3).Value = _
srcSheet.Range("E" & srcRow).Resize(1, 3).Value
Else
dstSheet.Range("E" & obj.Row).Resize(1, 3).Value = _
srcSheet.Range("E" & srcRow).Resize(1, 3).Value
End If
End If
Next
End Sub
'---------------------------------------
変数の型はObjectではなく明示した方がベターです。
また、ちゃんと目的に合った型を宣言すること。
それから、nameという変数はあまり感心しません。
以上。
No.2
- 回答日時:
これでどうでしょう。
---
With Sheets(dstSheet) '←これに対応するEnd Withがない
dstSheet.Range("E" & lngYLine).Resize(1, 3).Value = srcSheet.Range("E" & srcRow).Resize(1, 3).Value 'データ転記(4)
End With '←追加
No.1
- 回答日時:
If dstSheet.Range("E2") = "" Then dstRow = 1
この1行でIfは完結し、その下のEnd Ifは(3)のIf文の終了と判断されています。
If dstSheet.Range("E2") = "" Then
dstRow = 1
こうすればOK
ところで
If obj Is Nothing Then
このIf文は(転記先シート名)が空白の場合も判定されTrueになりますけど大丈夫ですか。
この回答への補足
回答ありがとうございます。
If dstSheet.Range("E2") = "" Then dstRow = 1
↓
If dstSheet.Range("E2") = "" Then
dstRow = 1
で変更しましたが
それでも、IF文のところでひっかかってしまいますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
これが怖いの自分だけ?というものありますか?
人によって怖いもの(恐怖症)ありませんか? 怖いものには、怖くなったきっかけやエピソードがあって聞いてみるとそんな感覚もあるのかと新しい発見があって面白いです。
-
集合写真、どこに映る?
あなたが集合写真を撮られるとき、画角のどのあたりにいることが多いですか? 私は振り返ってみると右の端にいることが多い気がします。
-
【選手権お題その2】この漫画の2コマ目を考えてください
サッカーのワンシーンを切り取った1コマ目。果たして2コマ目にはどんな展開になるのか教えてください。
-
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
抽出したデータを修正して元のセルに上書きしたい
Access(アクセス)
-
【マクロ】【VBA】別ブックへのデータ転記について
Excel(エクセル)
-
-
4
VBAについて質問。別シートに転記、再度修正すると上書き保存するVBAを作成する方法を知りたいです。
Visual Basic(VBA)
-
5
【マクロ】転記ツール。転記先にデータがある場合、上書きするか消すか質問をして欲しい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
VBA 空白行に転記する
-
EXCELのSheet番号って変更でき...
-
楽天RSSからエクセルVBAを使用...
-
【VBA】特定の条件でセルをコピー
-
マクロ実行後に別シートの残像...
-
FindNextがうまくいかない
-
VBAで変数の数/変数名を動的に...
-
グラフマクロで系列を変数にす...
-
エクセル 複数シートの同一セ...
-
Excel 条件一致の別シートの行...
-
vba 住所で判断して担当支店に...
-
VBA 重複チェック後に値をワー...
-
複数シートの複数列に入力され...
-
VBA Userformで一部別シートに...
-
Excel2013で切り取り禁止
-
GASでチェックボックスを一括of...
-
VBA : エクセルの列を5列追加し...
-
Changeイベントで複数セルへの...
-
Count Ifのセルの範囲指定に変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
マクロ実行後に別シートの残像...
-
EXCELのSheet番号って変更でき...
-
VBA 空白行に転記する
-
Count Ifのセルの範囲指定に変...
-
Changeイベントで複数セルへの...
-
VBAで変数の数/変数名を動的に...
-
VBA別シートの最終行の次行へ転...
-
楽天RSSからエクセルVBAを使用...
-
Excel2013で切り取り禁止
-
【VBA】特定の条件でセルをコピー
-
Unionでの他のシートの参照につ...
-
VBA 実行時エラー1004 rangeメ...
-
ExcelのVBマクロを、バックグラ...
-
100万件越えCSVから条件を満た...
-
複数シートの複数列に入力され...
-
VBA 別ブックからの転記の高速...
-
VBA Userformで一部別シートに...
-
テキストボックスから、複数の...
-
Excel VBA オートフィルターで...
おすすめ情報