Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Home : Excel 2019)
sheet1の値をsheet1に繰り返し転機させる
投稿日時: 23/06/25 10:50:38
投稿者: さぶ

お世話になります。
 
下記質問をさせてください。
sheet2のAからD列の2行目から6行目には
それぞれ番号・氏名・出身・生年月日が記載されています。
 
これを
sheet1のC1・B2・B3・B4に順番に転機させて、さらに3行あけて
C8・B9・B10・B11にsheet2の3行目の値を記載させる。
これをくりかえして6行目までの値をsheet1に記載させたく
loop関数などのサンプルをあたってみたりしましたが、うまくいきません
マクロの記録で対処しようとしましたが、コードがあまりきれいではありません。
 
小職力量不足でお力添えいただければ甚幸です
よろしくお願いします。
 
 
 

回答
投稿日時: 23/06/25 11:18:37
投稿者: taitani
投稿者のウェブサイトに移動

※GPT 結果です。
※動作確認未実施ですが見た目問題なしと判断。
’---------------------

Sub CopyValues()
    Dim srcSheet As Worksheet
    Dim destSheet As Worksheet
    Dim rowNum As Integer
    Dim destRow As Integer
    
    ' シートの指定
    Set srcSheet = ThisWorkbook.Sheets("Sheet2")
    Set destSheet = ThisWorkbook.Sheets("Sheet1")
    
    ' 値の転記
    destRow = 1 ' 転記先の行番号
    For rowNum = 2 To 6 ' 転記元の行番号
        destSheet.Range("C" & destRow).Value = srcSheet.Range("A" & rowNum).Value ' 番号の転記
        destSheet.Range("B" & (destRow + 1)).Value = srcSheet.Range("B" & rowNum).Value ' 氏名の転記
        destSheet.Range("B" & (destRow + 2)).Value = srcSheet.Range("C" & rowNum).Value ' 出身の転記
        destSheet.Range("B" & (destRow + 3)).Value = srcSheet.Range("D" & rowNum).Value ' 生年月日の転記
        
        destRow = destRow + 6 ' 転記先の行番号を更新
    Next rowNum
End Sub

回答
投稿日時: 23/06/25 12:37:04
投稿者: WinArrow

確認です
 
>sheet1のC1・B2・B3・B4に順番に転機させて、
↑のC1は、正しいですか?

回答
投稿日時: 23/06/25 13:58:33
投稿者: WinArrow

説明内容に矛盾があるように思います。
  
Sheet2には、A列〜D列(左から、番号・氏名・出身・生年月日)のデータがあります。
1行目は項目タイトル、データは2行目以降になります。
  
それをsheet1に転記したい。
条件は、4件毎に3行の空白を挿入する形で転記したい。
 
という具合に解釈したが、質問者の意図と食い違いがあれば、
他人にも理解できるよう、説明してください。
 
なお、説明の中には、項目行についての記述がありません。
その点も説明された方がよいでしょう。

回答
投稿日時: 23/06/25 14:03:51
投稿者: taitani
投稿者のウェブサイトに移動

私の解釈では、以下の様に出力したいと解釈。

Sheet1 の出力			
行/列	A	B	C
1			番号1
2		氏名1	
3		出身1	
4		生年月日1	
5			
6			
7			
8			番号2
9		氏名2	
10		出身2	
11		生年月日2	
12			
13			
14			
15			番号3
16		氏名3	
17		出身3	
18		生年月日3	
19			
20			
21			
22			番号4
23		氏名4	
24		出身4	
25		生年月日4	

投稿日時: 23/06/25 15:31:45
投稿者: さぶ

皆様
 
小職の質問の説明不足が混乱を招き
申し訳ありません。
 
再度申し上げます。
 
sheet2のAからD列の1行目はタイトルとして番号・氏名・出身・生年月日、
AからD列の2行目から6行目には
10000・山田太郎・東京・19800101
10001・鈴木太郎・神奈川・19800102といった具合に値があります。
 
これをsheet1のC1・B2・B3・B4に転記させたいのです。※C1であってます。
カードを作成したくて、このようなセルの配置でsheet2の個人名簿の値を
sheet1のカードのフォームに転記させたかったのです。
 
GPTやOPENAIも頼ってみましたが、うまくいきませんでしたので、
自力でコードを記載せねばならない十思っていましたが、
投稿者: taitani様のGPTのコードでうまくいったので、一応の解決ができました。
 
皆様のあたたかな協力があって成し遂げられ感謝しております。
なるべく自分で調べるようにはしているのですが、
どうしてもわからなければ他力本願にはなってしまいますが
よろしくお願いいたします。
 
 
 

回答
投稿日時: 23/06/25 16:14:02
投稿者: WinArrow

>sheet1のカードのフォームに転記させたかったのです。
 
これがあると、察しがついたのですが、
>6行目は不要な説明ですよね?

回答
投稿日時: 23/06/25 16:18:12
投稿者: simple

destRow = destRow + 6
は気づいて7に修正されたということでいいですか?

投稿日時: 23/06/25 16:51:35
投稿者: さぶ

最後のかたの質問の意味がちょっとわからないのですが・・・

回答
投稿日時: 23/06/25 17:19:12
投稿者: simple

1行目開始のブロックの次のブロックは、
7行開始ではなく、8行目開始ではないんですか?
それなら、6じゃなく、7を加算する必要があると思ったのですが、
こちらの勘違いでしたらスキップしてください。

回答
投稿日時: 23/06/25 23:04:25
投稿者: simple

問題が解決したのであれば、閉じていただけますか?

投稿日時: 23/06/26 11:47:13
投稿者: さぶ

無事解決することができました。
ありがとうございます。