電子書籍の厳選無料作品が豊富!

Excel処理について、教えて下さい。

下記表は、サンプルです。(実際には千件以上あります)

A列にある、1〜7の数字に対して、C列の言葉を繰り返し表示させたいです。(↓の下のように表示させたいです。)
うまく言葉で説明できず、申し訳ございませんが、何かマクロや関数を使ってやるやり方がありましたら、教えてください。
よろしくお願いします。

「Excel処理について、教えて下さい。 」の質問画像

A 回答 (6件)

>実際には千件以上あります



何が千件以上あるのでしょうか?
1~7はサンプルで数字が千件以上あるのだとすると、1~1100みたいな状態だということでしょうか?
それともC列の言葉が千件以上あるということでしょうか?
だとすると1~7だけで7千件以上の行になるということでしょうか?

>うまく言葉で説明できず、申し訳ございませんが・・・
説明だけでなく、添付画像を見ても何がしたいのか判りません。

No.1さんの回答にあるVLOOKUP関数は数字に対応したC列の文字列を表示させようとするものですので、
1 卵入れ
1 卵入れ
1 卵入れ
2 牛乳混ぜる 
2 牛乳混ぜる 
2 牛乳混ぜる 
という形になり、ご諮問者の例示されたものとは異なります。

No.2さんの回答のマクロはA列に数字があるとき、その数字のある行の数だけC列の文字を繰り返すというもののようです。
つまり、仮にA列に数字が1~1100まであるのなら、C列に3つの文字列があれば、マクロを実行するとB列はC列の3つの文字列「卵入れ」「牛乳混ぜる」「焼く」が1100回繰り返して表示され、最終行は3300行以降になるということだと思います。

これがご質問者の望んでいることなのでしょうか?
何か違うような気がするのは私だけでしょうか?
    • good
    • 0

スンマソン、修正です。

m(_._)m

「範囲 A1:B1 を選択⇒マウスポインタを…」
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
「範囲 A1:B1 を選択⇒Ctrl+Cをパシーッ⇒マウスポインタを…」
    • good
    • 1

一例です。

不都合があればその旨を分かり易く説明されたしッ!
A1: =INT((ROW(A1)-1)/3)+1
B1: =OFFSET(C$1,MOD(ROW(A1)-1,3),)

範囲 A1:B1 を選択⇒マウスポインタを[名前ボックス]内に放り投げ⇒そこに在る文字列 A1 を A1:A1500 に上書き⇒Enterキーをパシーッ⇒Ctrl+V を「エイヤッ!」と憎々し気に叩き付けッ!
オ・シ・マ・イ
「Excel処理について、教えて下さい。 」の回答画像5
    • good
    • 1

<ご参考>№2さんの結果が求められます。


スピル機能があれば
A11=int((row(A1:A21)+2)/3)
B11=choose(mod(row(A1:A21)-1,3)+1,C2,C3,C4)

無ければ
A11=INT((ROW(A1)+2)/3)
B11=CHOOSE(MOD(ROW(A1)-1,3)+1,$C$2,$C$3,$C$4)
下へフィルコピー
    • good
    • 1

ChatGPTに作ってもらいました。


繰り返し回数は、単純にA列最終行の値を使っています。

Sub RepeatData()
  Dim i As Integer
  Dim j As Integer
  Dim k As Integer
  Dim LastRow As Integer
  Dim RepeatCount As Integer
  Dim SourceRange As Range
  Dim TargetRange As Range
  
  'コピー元の範囲を取得
  Set SourceRange = Range("C2")
  LastRow = Range("C" & Rows.Count).End(xlUp).Row
  Set SourceRange = Range("C2:C" & LastRow)
  
  '貼り付け先の開始セルを指定
  Set TargetRange = Range("B2")
  
  '繰り返し回数を取得
  RepeatCount = Range("A" & Rows.Count).End(xlUp).Value
  
  'データを指定された回数繰り返して貼り付け
  For i = 1 To RepeatCount
    For j = 1 To SourceRange.Rows.Count
      For k = 1 To SourceRange.Columns.Count
        TargetRange.Offset((j - 1) + (SourceRange.Rows.Count * (i - 1)), k - 1).Value = SourceRange.Cells(j, k).Value
        TargetRange.Offset((j - 1) + (SourceRange.Rows.Count * (i - 1)), k - 2).Value = i
      Next k
    Next j
  Next i
End Sub
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございました!

お礼日時:2023/03/21 09:04

VLOOKUP関数で可能です。

    • good
    • 1

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