VBAで一連番号ごとに顧客データーを入力シートに入力し、転記ボタンにより帳簿(台帳)に記録するようにコード作成中ですが、転記先が同じ行になって上書されてしまいます。一連番号の行に順次に転記できるようにしたいのすが、作成コードが解りません。コード次のとおりです。作表は添付しています。
Sub 転記2()
Dim sh3 As Worksheet
Dim sh1 As Worksheet
Dim maxrow As Long
Dim row As Long
Dim dicT As Object
Dim key As Variant
Set sh3 = Worksheets("台帳")
Set sh1 = Worksheets("入力シート")
Set dicT = CreateObject("Scripting.Dictionary")
maxrow = sh3.Cells(Rows.Count, "CF").End(xlUp).row
'小切手番号を記憶
For row = 7 To maxrow
key = sh3.Cells(row, "CF").Value
dicT(key) = row
Next
key = sh1.Cells(35, "M").Value
key = sh1.Cells(36, "M").Value
key = sh1.Cells(37, "M").Value
key = sh1.Cells(38, "M").Value
key = sh1.Cells(39, "M").Value
key = sh1.Cells(40, "M").Value
If dicT.exists(key) = False Then
MsgBox ("小切手番号=" & key & "は台帳にありません")
Exit Sub
End If
row = dicT(key)
sh3.Range("V7").Value = sh1.Range("M35").Value '小切手番号
sh3.Range("AG7").Value = sh1.Range("M36").Value '小切手番号
sh3.Range("AQ7").Value = sh1.Range("M37").Value '小切手番号
sh3.Range("BA7").Value = sh1.Range("M38").Value '小切手番号
sh3.Range("BK7").Value = sh1.Range("M39").Value '小切手番号
sh3.Range("BU7").Value = sh1.Range("M40").Value '小切手番号
MsgBox ("転記します")
End Sub
No.8ベストアンサー
- 回答日時:
No.7のお礼に対して。
基本的には質問文にある
sh3.Range("V7").Value = sh1.Range("M35").Value '小切手番号
sh3.Range("AG7").Value = sh1.Range("M36").Value '小切手番号
sh3.Range("AQ7").Value = sh1.Range("M37").Value '小切手番号
sh3.Range("BA7").Value = sh1.Range("M38").Value '小切手番号
sh3.Range("BK7").Value = sh1.Range("M39").Value '小切手番号
sh3.Range("BU7").Value = sh1.Range("M40").Value '小切手番号
このコードを基に考えてますが、No.5~7のどれでもないと言うのはあとは何を欲しているのでしょうか?と疑問です。
台帳シートのV4~CF最終行までって文字が読めないのですが、一体何が書かれているのか?
入力シートに入力したものって本来なら1行分なのでしょうけど、M35~M40のどれか1つに対してだけ実行させたいって事なのでしょうか?
もしそうなら質問文のコードを、
Sub 転記2()
Dim sh3 As Worksheet
Dim sh1 As Worksheet
Dim maxrow As Long
Dim row As Long
Dim dicT As Object
Dim key As Variant
Set sh3 = Worksheets("台帳")
Set sh1 = Worksheets("入力シート")
Set dicT = CreateObject("Scripting.Dictionary")
maxrow = sh3.Cells(Rows.Count, "CF").End(xlUp).row
'小切手番号を記憶
For row = 7 To maxrow
key = sh3.Cells(row, "CF").Value
dicT(key) = row
Next
key = sh1.Cells(35, "M").Value
If dicT.exists(key) = False Then
MsgBox ("小切手番号=" & key & "は台帳にありません")
Exit Sub
End If
row = dicT(key)
sh3.Range("V" & row).Value = sh1.Range("M35").Value '小切手番号
sh3.Range("AG" & row).Value = sh1.Range("M36").Value '小切手番号
sh3.Range("AQ" & row).Value = sh1.Range("M37").Value '小切手番号
sh3.Range("BA" & row).Value = sh1.Range("M38").Value '小切手番号
sh3.Range("BK" & row).Value = sh1.Range("M39").Value '小切手番号
sh3.Range("BU" & row).Value = sh1.Range("M40").Value '小切手番号
MsgBox ("転記します")
End Sub
となるように思われますけど?
No.5
- 回答日時:
No.2~4です。
何か思いっきり勘違いだったかも。
No.3とNo.4のコードはダメでしょうね。
GooUserラックさんの回答の方が正解に近いかも?
Sub 転記2()
Dim sh3 As Worksheet
Dim sh1 As Worksheet
Dim maxrow As Long
Dim row As Long
Dim dicT As Object
Dim key As Variant
Dim r1 As Range, st As String '★追加
Dim i As Integer, v As Variant '★追加
Set sh3 = Worksheets("台帳")
Set sh1 = Worksheets("入力シート")
Set dicT = CreateObject("Scripting.Dictionary")
maxrow = sh3.Cells(Rows.Count, "CF").End(xlUp).row
'小切手番号を記憶
For row = 7 To maxrow
key = sh3.Cells(row, "CF").Value
dicT(key) = row
Next
st = ""
v = Array("V", "AG", "AQ", "BA", "BK", "BU")
For Each r1 In sh1.Range("M35:M40")
key = r1.Value '★順次セルの値を変化させ代入する
If dicT.exists(key) = False Then
st = st & "小切手番号=" & key & "は台帳にありません" & vbCrLf '★最後に表示させる
'Exit Sub '★途中で抜けるのは違いますよね?"
Else
row = dicT(key)
For i = 0 To UBound(v)
sh3.Range(v(i) & row).Value = key '小切手番号
Next
End If
Next
MsgBox ("転記しました")
If st <> "" Then MsgBox (st) '★台帳にない小切手番号が存在してたら表示
End Sub
かな?
No.4
- 回答日時:
No.2です。
このコードは破棄してください。
修正版。
Sub 転記2()
Dim sh3 As Worksheet
Dim sh1 As Worksheet
Dim maxrow As Long
Dim row As Long
Dim dicT As Object
Dim key As Variant
Dim r1 As Range, st As String '★追加
Dim i As Integer, v As Variant '★追加
Set sh3 = Worksheets("台帳")
Set sh1 = Worksheets("入力シート")
Set dicT = CreateObject("Scripting.Dictionary")
maxrow = sh3.Cells(Rows.Count, "CF").End(xlUp).row
'小切手番号を記憶
For row = 7 To maxrow
key = sh3.Cells(row, "CF").Value
dicT(key) = row
Next
st = ""
i = 0
v = Array("V8", "AG8", "AQ8", "BA8", "BK8", "BU8")
For Each r1 In sh1.Range("M35:M40")
key = r1.Value '★順次セルの値を変化させ代入する
If dicT.exists(key) = False Then
st = st & "小切手番号=" & key & "は台帳にありません" & vbCrLf '★最後に表示させる
'Exit Sub '★途中で抜けるのは違いますよね?"
Else
row = dicT(key)
sh3.Range(v(i)).Value = r1.Value '小切手番号
End If
i = i + 1
Next
MsgBox ("転記しました")
If st <> "" Then MsgBox (st) '★台帳にない小切手番号が存在してたら表示
End Sub
転記する小切手番号がなかった場合、転記するセルは空白で宜しいのですよね?
No.2のコードですと空白にならず詰めてしまいますので違うかなと思いまして。
No.3
- 回答日時:
No.2です。
図が見づらいのはPC画面で見てみて何となくわかりました。
>V8~BU8に転記されない?
コードをよく見てみて下さい。
V7~BU7を指定してます。
変更をかけた際の修正漏れではないでしょうか?
未検証で申し訳ないですが、
Sub 転記2()
Dim sh3 As Worksheet
Dim sh1 As Worksheet
Dim maxrow As Long
Dim row As Long
Dim dicT As Object
Dim key As Variant
Dim r1 As Range, st As String '★追加
Dim i As Integer, v As Variant '★追加
Set sh3 = Worksheets("台帳")
Set sh1 = Worksheets("入力シート")
Set dicT = CreateObject("Scripting.Dictionary")
maxrow = sh3.Cells(Rows.Count, "CF").End(xlUp).row
'小切手番号を記憶
For row = 7 To maxrow
key = sh3.Cells(row, "CF").Value
dicT(key) = row
Next
st = ""
i = -1
v = Array("V8", "AG8", "AQ8", "BA8", "BK8", "BU8")
For Each r1 In sh1.Range("M35:M40")
key = r1.Value '★順次セルの値を変化させ代入する
If dicT.exists(key) = False Then
st = st & "小切手番号=" & key & "は台帳にありません" & vbCrLf '★最後に表示させる
'Exit Sub '★途中で抜けるのは違いますよね?"
Else
row = dicT(key)
i = i + 1
sh3.Range(v(i)).Value = r1.Value '小切手番号
End If
Next
If i > -1 Then MsgBox ("転記しました")
If st <> "" Then MsgBox (st & "以上。") '★台帳にない小切手番号が存在してたら表示
End Sub
このような感じでしょうかね?
No.2
- 回答日時:
スマホなので確認は出来ませんが。
key = sh1.Cells(35, "M").Value
key = sh1.Cells(36, "M").Value
key = sh1.Cells(37, "M").Value
key = sh1.Cells(38, "M").Value
key = sh1.Cells(39, "M").Value
key = sh1.Cells(40, "M").Value
って結局一番最後のM40の値がkeyに入るだけですよね?
なので書き出すためのループを作成しないとダメなのではないかな?
スマホなのでコードは書けませんけど。
No.1
- 回答日時:
図が良く見えないので自信はありませんが
sh3.Range("V7").Value = sh1.Range("M35").Value '小切手番号
sh3.Range("AG7").Value = sh1.Range("M36").Value '小切手番号
sh3.Range("AQ7").Value = sh1.Range("M37").Value '小切手番号
sh3.Range("BA7").Value = sh1.Range("M38").Value '小切手番号
sh3.Range("BK7").Value = sh1.Range("M39").Value '小切手番号
sh3.Range("BU7").Value = sh1.Range("M40").Value '小切手番号
は以下ではありませんか?
sh3.Cells(row,"V").Value = sh1.Range("M35").Value '小切手番号
sh3.Cells(row,"AG").Value = sh1.Range("M36").Value '小切手番号
sh3.Cells(row,"AQ").Value = sh1.Range("M37").Value '小切手番号
sh3.Cells(row,"BA").Value = sh1.Range("M38").Value '小切手番号
sh3.Cells(row,"BK").Value = sh1.Range("M39").Value '小切手番号
sh3.Cells(row,"BU").Value = sh1.Range("M40").Value '小切手番号
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。 6 2023/03/21 16:12
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelの差込印刷で可視セルだけ...
-
Excel で行を指定回数だけコピ...
-
Excel VBA インデックスの境...
-
《エクセル》リストから同じ分...
-
Excel VBA 時刻でのD...
-
【WORD差し込み印刷】複数レコ...
-
エクセル:VBAで月変わりで、自...
-
VBA:同じ文字列データの比...
-
エクセルVBA 別シートの複数の...
-
VBA 貼付先範囲(行)がいっぱ...
-
エクセルVBAで 2種のリストを...
-
エクセルVBAで SendKeys "{TAB}"
-
excel:色付き文字の抽出と変換法
-
エクセルVBAで実行時エラー...
-
EXCELマクロで全シート対...
-
ドコモの電話帳バックアップに...
-
携帯電話番号を英語で?
-
ドメイン名が、ak.sky.tkk.ne.j...
-
外付けHDのアダプタ間違え、起...
-
スマホ機種変更で旧機種のGoogl...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel で行を指定回数だけコピ...
-
Excel VBA インデックスの境...
-
excelの差込印刷で可視セルだけ...
-
エクセル:VBAで月変わりで、自...
-
VBA:同じ文字列データの比...
-
エクセルVBAで 2種のリストを...
-
エクセルVBA 別シートの複数の...
-
Excel VBAでシート内全体に非表...
-
VBA別シートの最終行の下行へ貼...
-
エクセルVBAで SendKeys "{TAB}"
-
VBA 貼付先範囲(行)がいっぱ...
-
ExcelVBAで改ページを追加したい
-
歯抜けの時間を埋めて行の挿入
-
VBAで複数シート選択
-
VBAで条件が一致する行のデータ...
-
VBA 最終行取得からの繰り返し貼付
-
エクセル2007で、マクロで、結...
-
Excelマクロ データが上書きさ...
-
Excel VBA :2回目以降実行で貼...
-
EXCELマクロで全シート対...
おすすめ情報
・GooUerラックさん 有り難う御座います。
コードの数字を消して実行してみましたが、「小切手番号=台帳にありません」とメッセージでました。
・めぐみさん 有り難う御座います。
入力シートに小切手NOを全て入れない「小切手番号=台帳にありません」とメッセージでます。すべてに入力すると7行目のみ転記されます。ループを教えて頂ければ助かります。
めぐみんさん 有り難う御座います。
ご教授いただいたコードはNO5のとおり修正し、転記実行したところ「転記しました」とメッセージされました。一連番号2で実行したところ2行目の指定セルに転記され、M36~M38を空白にすると「小切手番号が台帳にありません」とメッセージされ、指定セルは空白になり、うまく実行できました。
しかし、台帳のM8~BU13セルの全てに入力シートのM35~M40の小切手Noが1行ごとに同じNOで転記されます。一連番号ごとに転記できるように、手数ですが教えていただきますようお願いします。
休日でお休みにところすみません。