ExcelでC2からデータが縦に5つずつ入力されています。
そのデータをG列(G1から開始)に横にデータをはりつけたいのですがどこがおかしいでしょうか?
添付画像は、実行した結果こうしたいという意味ではりつけてます。
エラーになる個所は
Cells(i, Q + 7) = myList(Z, 1) ' G列からK列にコピーです
全体コード↓↓
Sub 縦リストを横リストに変換()
Dim i As Long
Dim Q As Long
Dim Z As Long
Dim lastRow As Long
Dim myList As Variant
' C列のデータを配列に格納
myList = Range("C2", Range("C" & Rows.Count).End(xlUp))
' 最終行を取得
lastRow = Cells(Rows.Count, 3).End(xlUp).Row
Z = 1
' 列をループ
For i = 1 To lastRow / 5
' 配列を5つ分ループ
For Q = 0 To 4
Cells(i, Q + 7) = myList(Z, 1) ' G列からK列にコピー
Z = Z + 1
Next Q
Next i
End Sub
No.3
- 回答日時:
No1です。
>関数だとファイルがかなり重くなっていました。
もしも、お使いのバージョンがOffice365等であれば、G1セルに
=INDEX(C:C,ROW(OFFSET(A1,,,ROUNDUP((MAX(FILTER(ROW(C:C),C:C<>""))-1)/5,0)))*5-4+COLUMN(A1:E1))&""
の式を入力すれば、下方、右方の必要な範囲に自動でスピルされます。
(こちらなら、1セルだけの関数入力なので重くなることはないと思います)
※ 上記は、「C列に値が入っているセルまで」全て反映しますが、「5つのデータが揃っている行まで」とするなら、ROUNDUP関数をROUNDDOWN関数に変えればそのようになります。
どうしてもVBAで行いたいのなら、以下のようなものでも可能と思います。
Sub Sample()
For r = 2 To Cells(Rows.Count, 3).End(xlUp).Row Step 5
Cells(Int(r / 5) + 1, 7).Resize(, 5).Value = _
Application.Transpose(Cells(r, 3).Resize(5).Value)
Next r
End Sub
※ 上記は数式の例と同様に「C列に値が入っているセルまで」としていますが、「5つのデータが揃っている行まで」としたいのなら、For文の繰り返し制御の最大値を同様に切り捨てることで可能になります。
No.1
- 回答日時:
こんにちは
添付図が正しいのなら、元データはC1セルから5行分ずつのはず。
これに対して、
>myList = Range("C2", Range("C" & Rows.Count).End(xlUp))
としているので、例示の図で言えば、C2:C15の範囲の値を取得しています。
出力する際に、1行分ずれてしまうし、最後に値が存在しないのでエラーになる。
・・ということが起きていると思いますが?
とりあえず、C1セルから取得するようにすれば、意図した結果になるでしょう。
別法として、G1セルに
=INDEX(OFFSET($C$1,ROW(A1)*5-5,0,5),COLUMN(A1))&""
の関数式を入れておいて、G:K列の適当な行までフィルコピーしておけば、
VBAを実行しなくても、入力内容が即時に反映されるようになります。
(365環境なら、配列計算式にしておけばフィルコピーも不要になります)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
ExcelVBAマクロで実行した時の疑問
Visual Basic(VBA)
-
VBAなくなるの?
Visual Basic(VBA)
-
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
-
4
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
5
VBAコードのインデント表示
Visual Basic(VBA)
-
6
VBA初心者です。次のVBAコードで、17行目を削除したいのですがうまく動きません 改善策を教えてく
Visual Basic(VBA)
-
7
Excel_VBAについて質疑です。(for~next)
Visual Basic(VBA)
-
8
Excel-VBAのmsgBox()の不思議
Visual Basic(VBA)
-
9
Excel VBA 定義されたプロージャ名、関数名の取得
Visual Basic(VBA)
-
10
VBA 複数条件の分岐処理の上手な方法
Visual Basic(VBA)
-
11
Excel VBA 選択範囲の罫線色の変更プロージャの動作速度の改善について
Visual Basic(VBA)
-
12
VBAの間違い教えて下さい
Visual Basic(VBA)
-
13
VBAに詳しい方教えてください。
Visual Basic(VBA)
-
14
Vba 実数および実数タイプの変数について教えてください
Visual Basic(VBA)
-
15
エクセルVBA
Visual Basic(VBA)
-
16
VBAでCOPYを繰り返すと、処理が途中でアイドルする原因はなんでしょうか
Visual Basic(VBA)
-
17
エクセルVBAコードで教えて下さい!
Visual Basic(VBA)
-
18
VBの色を変えるにはどうしたらいいですか?
Visual Basic(VBA)
-
19
プログラミング
Visual Basic(VBA)
-
20
データチェックを行うエクセルマクロをおしえてほしい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでセルの書式を変えずに文字...
-
【VBA】 結合セルに複数画像と...
-
VBA 別ブックからコピペしたい...
-
[Excel VBA]特定の条件で文字を...
-
【VBA】スペースが入っていない...
-
Excel 範囲指定スクショについ...
-
VBA 別ブックから条件に合うも...
-
VBAコードのインデント表示
-
VBAの質問です、複数のテキスト...
-
エクセル タブの下のメニューを...
-
【VBA】値を変更しながら連続で...
-
Web画面の文字をVB6で取得したい
-
VBA 入力箇所指定方法
-
【ExcelVBA】インデックスが有...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 別ブックからコピペしたい...
-
VBA 別ブックから条件に合うも...
-
vba 別ブックに転記
-
【ExcelVBA】インデックスが有...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセル タブの下のメニューを...
-
配列のペースト出力結果の書式...
-
Web画面の文字をVB6で取得したい
-
エクセルのマクロについて教え...
-
エクセルのマクロついて教えて...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
[Excel VBA]特定の条件で文字を...
-
エクセルのマクロについて教え...
-
VBA 入力箇所指定方法
-
EXCEL vbaでシート上に配置した...
-
エクセルのマクロについて教え...
おすすめ情報
いつも書込みありがとうございます。m(_ _"m)
すみません。添付の図が間違っていました。実際には1行目には項目がはいっているため、やはりC2からになります。申し訳ありません。
>myList = Range("C2", Range("C" & Rows.Count).End(xlUp))
不思議なことに4項目のときは問題なく動いているんですが、項目を5つにすると
稼働しなくなるんです。(GからKにはデータはきちんと表示されるのですがそのあとエラーメッセージ「インデックスが有効な範囲にありません)が表示されその後の処理が稼働しない)
デバック内容については添付します。
あと、関数ありがとうございます。処理はできました。
ただデータが大量のため、関数だとファイルがかなり重くなっていました。
何かまたアドバイスがありましたらよろしくお願いします。
理由それだったんですね。B列に項目の文字データはあるのにC列のデータが入ってないから
動かなかったのが判明しました。
その箇所を行を選んで削除したらエラーメッセージでなくなりました。
勉強になりました。
ありがとうございました。