
こんにちは。
一枚のsheet1のA5からE5の1行分を、別のsheet2に転記したいと思っています。
条件としては、ボタンで、sheet1で入力したC5の値をsheet2のD列から探し、探した値の右横にsheet1のA5からE5の1行分を転記したいと思っています。
イメージとしては、ある顧客にたいし、問い合わせのあった内容を、その都度データベースとして別シートに蓄積していく感じです。
ただ、sheet2のD列には、顧客の名前、Eから K列には、顧客の基本情報を入れてあるので、L列から5列ずつを1回分の問合せ内容として、sheet1に入力したものを転記、蓄積したいと考えています。
どのようなマクロをかいたらよいか、ご教授願えますでしょうか。
よろしくお願いいたします。
No.10ベストアンサー
- 回答日時:
「 '//データを貼り付ける列を取得」のことでしょうか?
2種類書いてありますが最初の方のコードはコメント化してあるので実際には無視されます。
なので2種類書く必要はないです。
正確に言うと修正した際に最初の処理をコメント化したものが残っている状態です。
コード修正後、やっぱり前の処理に戻したいということもあるのでDeleteで消さずにコメント化しておくと良いかもです。
こんばんは。
ありがとうございます!
申し訳ありません。
私が1つ大きな間違いをしていました。
C5セルではなく、B5セルを蓄積していくシートのB列から探し、その行の右にいくつかある顧客情報の更に右に5列セットで蓄積していく状態を作るようにしたい形です。
おそらくこのため上書きされていたのかもわかりません。
申し訳ありません。
なるほど!コメント化してあったのにきづかづそのままやってしまってました。
初歩的なミス申し訳ありません。
また明日やってみます!!
本当にありがとうございます!
No.12
- 回答日時:
ANo11です。
>C5セルではなく、B5セルの間違いでした。
No11のサンプルではC5セルの内容で探すようになっているので、実行すると「登録されていません」の連発になってしまいますね。(^_^;)
とは言うものの、B5セルもコピー範囲内なので、列の位置が違うだけで、同じことになっていませんか?
いずれにしろ、検索値を指定しているのは
WorksheetFunction.Match(dataSht.Cells(5, 3).Text, dbSht.Columns(4), 0)
のところなので、そこで正しいセルを参照するようにしてあげれば、動作すると思います。
No.11
- 回答日時:
ANo1です。
なんだか苦戦なさっているようですので、ご参考までに、こちらでもサンプルを作成してみました。
処理方法はNo1に記した手順に沿っています。
ご質問の内容を再確認したところ、元データのC5セルの内容は顧客名と一致しているはずですが、蓄積シートの欄へコピーする内容にも含まれていますよね?
ということは、結果として、顧客名別に蓄積する行の5列おきに(記載する必要のなさそうな)顧客名が繰り返し出てくることになり、蓄積シートの効率や一覧性が若干悪くなるような気がします。
・・・などということはさておいて、以下ではどうでしょうか?
※ エラー処理等は考慮していません。
ただし、顧客リストに参照値が無い場合がありそうなので、
これだけは対応しています。
Sub Sample()
Dim dataSht As Worksheet, dbSht As Worksheet
Dim rw As Long, col As Long
Set dataSht = Worksheets("Sheet1") '元データシート
Set dbSht = Worksheets("Sheet2") '蓄積用シート
'リストから顧客行を検索
On Error Resume Next
rw = WorksheetFunction.Match(dataSht.Cells(5, 3).Text, dbSht.Columns(4), 0)
If Err.Number = 1004 Then
MsgBox "該当する顧客が登録されていません"
Exit Sub
End If
On Error GoTo 0
'記入開始列を算出
col = dbSht.Cells(rw, Columns.Count).End(xlToLeft).Column
col = Int((col + 3) / 5) * 5 + 2
If col < 12 Then col = 12
'データ(5列分)をコピー
dataSht.Range("A5:E5").Copy
dbSht.Cells(rw, col).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
No.9
- 回答日時:
上書きされてしまいますか?
こちらで動かしているものでは顧客情報の横に追記されていってます。
とりあえずもう一度こちらのコードをすべて貼り付けますね。
(ペースト方法は値貼り付けに変えてあります)
----------------------------------------------------------
Sub aaa()
'//---シート名と指定-----------
Const SNM1 = "Sheet1"
Const SNM2 = "Sheet2"
'//----------------------------
Dim strKSK As String
Dim dblRETU As Double
Dim dblHARU As Double
'//一致する社名を検索
strKSK = Sheets(SNM1).Range("C5")
dblRETU = Application.WorksheetFunction.Match(strKSK, Sheets(SNM2).Range("D:D"), 0)
' '//データを貼り付ける列を取得
' Sheets(SNM2).Range("D" & dblRETU).Select
' Selection.End(xlToRight).Select
' dblHARU = ActiveCell.Column + 1
'//データを貼り付ける列を取得
Dim MaxCol As Double
MaxCol = Columns.Count
Sheets(SNM2).Select
Sheets(SNM2).Cells(dblRETU, MaxCol).Select
Selection.End(xlToLeft).Select
dblHARU = ActiveCell.Column + 1
'//貼り付け
Sheets(SNM1).Select
Sheets(SNM1).Range("A5:E5").Copy
Sheets(SNM2).Select
Sheets(SNM2).Cells(dblRETU, dblHARU).Select
' ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues
End Sub
----------------------------------------------------------
2回実行させた時のsheet2の映像もつけておきます(小さくて見づらいと思いますが)。

No.8
- 回答日時:
エラーがでるのは
----------------------------------------------------------
'//貼り付け
Sheets(SNM1).Range("A5:E5").Copy
Sheets(SNM2).Cells(dblRETU, dblHARU).Select
ActiveSheet.Paste
----------------------------------------------------------
の「Sheets(SNM1).Range("A5:E5").Copy」ここでしたね?
失礼しました。
そしたら「この前に「Sheets(SNM1).Select」を追記してみてください。
ダメだったらエラーメッセージを教えてください。
ありがとうございます!
貼り付けられました!
ですが、なぜか、列がうまく取得できていないのか、本来の入れたい顧客基本情報の、次のところからではなく、顧客情報を、上書きしてしまう形になってしまいました。
右の列がうまく取得できない原因がわかりますでしょうか?
また、値貼り付けにすることはできますでしょうか?
No.7
- 回答日時:
そうですね。
先ほどと同じように「Sheets(SNM2).Select」を「Sheets(SNM2).Cells(dblCOL, dblHARU).Select」の前に記入してみてください。
No.6
- 回答日時:
そしたらこのコードを追加してみてもらえますか?
↓
Sheets(SNM2).Select
追加する場所は「Sheets(SNM2).Cells(dblRETU, MaxCol).Select」の前です。
-------------------------------------------------------------------------------
'//データを貼り付ける列を取得
Dim MaxCol As Double
MaxCol = Columns.Count
Sheets(SNM2).Select
Sheets(SNM2).Cells(dblRETU, MaxCol).Select
Selection.End(xlToLeft).Select
dblHARU = ActiveCell.Column + 1
-------------------------------------------------------------------------------
ありがとうございます。
ひっかからなくなりました。
あと、最後のところで、
張り付けるところですが、sheets(SNM1).cellsの列のところもエラーが出てしまいます。
なんとかあと少しよろしくお願いいできますでしょうか?
先程と同じようにしたら行けますでしょうか?
No.5
- 回答日時:
No.2のコードではエラーが出なく、No.4のコードに置き換えたらエラーでたという事で良いでしょうか?
だとするとNo.3で記載した修正がされていないとか?
私の方では「intRETU」「intHARU」は全て「dblRETU」「dblHARU」に置換してあります。
ありがとうございます。
私はちょうど反対しておりましたが、全て統一しております。
ただ、sheets(SNM2)から始まるところですが、シートは1の方に張り付けると思い1に直してやってみたのですが、dblHARUの方がうまく行かないようで困ってます。
No.4
- 回答日時:
No.2です。
途中に空白が存在する可能性があるならばこうゆうのはどうでしょう?
-------------------------------------------------------------------------------
'//データを貼り付ける列を取得
Dim MaxCol As Double
MaxCol = Columns.Count
Sheets(SNM2).Cells(dblRETU, MaxCol).Select
Selection.End(xlToLeft).Select
dblHARU = ActiveCell.Column + 1
-------------------------------------------------------------------------------
「 '//データを貼り付ける列を取得」の箇所をそっくり上のコードに置き換えてみてください。
やっていることとしてはシートの最終列からデータの存在する列まで移動させて列番号を取得させています。
この場合の注意点としては毎回sheet1のE5には必ず何かデータを入力しておくことが前提となります。
入力を要するデータがなかった時は「(なし)」でも何でも良いのでデータを入れておくようにします。
繰り返し処理(Loop)などを使用してもう少しシステマチックにすることももちろん出来ますが、まずはこの辺から動かしてみてはいかがでしょう?
もし難易度が上がっても良いということでしたらお手伝いしますのでおっしゃって下さい。
コンパイルエラーに関しては無視しといてはいけないような気がしますが(笑)
というかほっといたら動かないのではないかな?と。
誰でも最初は全く分からないところから始めるものなので知識不足なことは全然恥ずかしくないですよ。
最初は苦労も多いですが頑張ってください。
という私もまだまだ勉強中の身です・・・(^^;
ありがとうございます。
データを張り付けるところの、クラスメソッドが、どうしてもエラーになってしまいます。
どうしたらよいかご教授ねがえますでしょうか?
すごいですね!勉強中でもうこんなとこまでできるんですね!
No.3
- 回答日時:
No.2です。
ちょっと記入ミスがありました。
Dim dblRETU As Double
Dim dblHARU As Double
と変数の宣言をしているのにコードでは「intRETU」「intHARU」としてしまいました。
直して下さいませ。
失礼致しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 別sheetからの転記なのですが 2 2023/05/22 15:55
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Excel(エクセル) エクセルの日付抽出 2 2023/02/03 15:02
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Visual Basic(VBA) VBA Userform転記のみ編集可 1 2023/06/29 11:03
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Visual Basic(VBA) tatsumaru77様 昨日回答して頂いたものです。 すみませんが、昨日の質問で1つ補足があります 1 2022/05/15 15:06
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルのdatedif関数を使って...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
エクセル ドロップダウンリスト...
-
【関数】同じ関数なのに、エラ...
-
Office2021のエクセルで米国株...
-
【マクロ】列を折りたたみ非表...
-
9月17日でサービス終了らし...
-
【マクロ】アクティブセルの時...
-
ページが変なふうに切れる
-
【条件付き書式】シートの中で...
-
【マクロ】3行に上から下に並...
-
【マクロ】オートフィルターの...
-
【マクロ】EXCELで読込したCSV...
-
【画像あり】オートフィルター...
-
他のシートの検索
-
エクセルの循環参照、?
-
Excelファイルを開くと私だけVA...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報
また、値だけを貼り付けらる場合は何らかの指定をしないといけないかと思いますが、ご教授願えますでしょうか。
よろしくお願いいたします。