エクセルで横並びの複数データを縦のデータにしたい
こんにちは。宜しくお願い致します。
A B C D E F
1 生食 1 本 あめ 2 個
2 玉 2 個 いか 1 本
3 あめ 1 個 パン 1 枚
例えばこういう形であったとします。
これを別のシート(同じシートの違う場所でも構いません)に縦並びで出したいときどうしたらいいでしょうか。
★こういう風にしたい★
A B C
1 生食 1 本
2 玉 2 個
3 あめ 1 個
4 あめ 2 個
5 いか 1 本
6 パン 1 枚
※重複していても構いません。
データ量が多く、コピーペーストではしんどいです。また、横データも同じ感じであと5つ位あるので。
宜しくお願い致します。
No.7ベストアンサー
- 回答日時:
No.1・3・6です。
>2行目からのコピー&ペーストで・・・
前回のコードを少し変更するだけです。
尚、Sheet1の1行目項目は最終列まで入っているという前提です。
(1行目で最終列を取得しているため)
Sub Sample3()
Dim j As Long, lastRow As Long
Dim wS As Worksheet
Set wS = Worksheets("Sheet2")
'//▼Sheet2の2行目以降を消去//
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(wS.Cells(2, "A"), wS.Cells(lastRow, "C")).ClearContents
End If
'//▼ココから操作//
With Worksheets("Sheet1")
For j = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column Step 3
lastRow = .Cells(Rows.Count, j).End(xlUp).Row
Range(.Cells(2, j), .Cells(lastRow, j + 2)).Copy wS.Cells(Rows.Count, "A").End(xlUp).Offset(1) '//★//
Next j
End With
wS.Activate
MsgBox "完了"
End Sub
※ 本来であれば、「★」の行で前回は「1」になっているところを「2」に変更するだけでよいと思うのですが、
Sheet2も1行目が項目行だとして変更してみました。m(_ _)m
No.9
- 回答日時:
No5です。
よく確かめずに的外れな回答をして申し訳ありません。言い訳になりますが、例示のようなデータ配列をどのように活用していたのかが想定できません。
余計なお世話かもしれませんが、やりたいことの目的は出来上がったデータをデーターベースのテーブルデータとして読み込みたいのかと想像しました。だどすれば、ややこしいことは考えずにそのまま取り込んで、必要な列の組だけのテーブルをいくつか作成し、追加クエリを何回か実行すれば出来上がります。目的がデータベースでなくても、このテーブルをテキストで吐き出せは結果は同じものが得られます。
あくまで、余計なお世話ですが。
No.8
- 回答日時:
No.7で記載していますが・・・
>尚、Sheet1の1行目項目は最終列まで入っているという前提です。
>(1行目で最終列を取得しているため)
の部分です。
Sheet1の1行目で最終列を取得するようにしていますので、
Sheet1に1行目は最終列まで何らかのデータがないとデータがある列まででループが止まってしまいます。
※ VBAに関しては、ごく初歩的なコードで投稿したのですが、
ご自身で手直しできないのであれば、
No.1で投稿したような方法で、コツコツ手作業で操作した方が無難だと思います。m(_ _)m
No.6
- 回答日時:
No.1・3です。
>複雑な業務をしているので・・・
とありますが、文章だけではどのようなコトをしたいのかが不明です。
>A〜Fのモジュールと比較するために同じようにG〜Iを追加すると・・・
同じような操作を3列おきに行えば良い!というコトでしょうかね?
本来であればビフォー&アフターの画像などを添付してもらうのが一番わかりやすいのですが、
とりあえず上記のようなコトだとしてのコードです。
Sub Sample2()
Dim j As Long, lastRow As Long
Dim wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Range("A:C").ClearContents
With Worksheets("Sheet1")
For j = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column Step 3
lastRow = .Cells(Rows.Count, j).End(xlUp).Row
Range(.Cells(1, j), .Cells(lastRow, j + 2)).Copy wS.Cells(Rows.Count, "A").End(xlUp).Offset(1)
Next j
End With
wS.Range("A1:C1").Delete
wS.Activate
MsgBox "完了"
End Sub
※ 一般的には項目行があると思うのですが、
最初の質問文通り1行目からのコピー&ペーストとしています。m(_ _)m
No.4
- 回答日時:
VBAでプログラムを記述してロードさせるより、マウス操作で地道に処理した方が早いと思いますが・・・データーがきれいに配列されれば、その後はマクロなりVBAで思う存分好きなように処理できます。
其の素地を作成にするのにプログラムを記述・エラーチェックする時間があれば、マウス操作によるアナログ処理の方が効率的のような気がしますけどね・・・それと根本的にVBAは不慣れなので的確なお答えができません。
No.3
- 回答日時:
No.1です。
>VBAで出来たら、早いような気がします!
前回回答した操作をそのままコードにしてみました。
(Sheet1のデータをSheet2に!)
標準モジュールにしてください。
Sub Sample1()
Dim lastRow As Long
Dim wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Range("A:C").ClearContents
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
Range(.Cells(1, "A"), .Cells(lastRow, "C")).Copy wS.Range("A1")
Range(.Cells(1, "D"), .Cells(lastRow, "F")).Copy wS.Cells(Rows.Count, "A").End(xlUp).Offset(1)
End With
wS.Activate
MsgBox "完了"
End Sub
こんな感じではどうでしょうか?m(_ _)m
No.2
- 回答日時:
順不同で縦配列にしたいのなら
まずは配列後に抽出や並び替えをしやすいように項目ごとにナンバリングします。ナンバリングの列を含め各データは1つセルに1つだけにして列項目ごとに縦揃えにします。
ナンバリングの方法は
1~3の縦並びにした番号列を基準に1にマウスカーソルを置いて左ボタンを押したまま3までを指定すると、指定した部分だけハイライト表示と共に枠が表示されます。枠の右隅にカーソルを置き、マウスの左ボタンを押したっままでに任意の場所の行数まで下にスクロールすると自動で4以下の数字でナンバリングできます。
後は列項目ごとを一括で「切り取り」「貼り付け」を繰り返せば、セルデータ1個単位で移動させるより効率が上がると思います。
No.1
- 回答日時:
こんにちは!
元データはお示しのようにA~F列までのデータなのですね。
一番簡単な方法として・・・
元データはSheet1にあり、Sheet2にコピー&ペーストするとします。
A1~C1セルを選択 → Ctrl+Shiftを押しながら「↓」(下向き矢印)を押す → A~C列の最終行までが選択されますので
右クリック → コピー → Sheet2のA1セルに貼り付け
同様にD1~F1セルを選択 → ・・・中略・・・ → Sheet2のA列最終行の1行下を選択
(A列を選択 → Ctrl+「↓」で最終行が選択されるのでその下の行を選択) → 貼り付け!
コツコツ手を動かすのが一番簡単だと思います。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
字面がカッコいい英単語
あなたが思う「字面がカッコいい英単語」を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルで横並びの複数データを縦の一本のデータにしたい
Excel(エクセル)
-
エクセル 横並びの複数行データを縦1列にしたい
Excel(エクセル)
-
Excel VBAで、横並びのデータを縦並びにしたい
その他(Microsoft Office)
-
-
4
エクセルで1列に500行並んだデータを5列毎に改行
Excel(エクセル)
-
5
エクセルで縦に並んだデータをある項目毎に横に並び替えたい
Excel(エクセル)
-
6
VBA横のデータを縦にする方法
Excel(エクセル)
-
7
エクセルで長い行を5行ごとに1列にするには?
Excel(エクセル)
-
8
エクセルで横データを縦に並べ変えたいです。
財務・会計・経理
-
9
Excelで縦列グループが横並びになっているのを、縦1列に並び変えたいです。
Excel(エクセル)
-
10
エクセルで、縦項目と横項目を複数列ごとに入れ替える方法はありますでしょうか?
Excel(エクセル)
-
11
Excelで、横並べのデータを縦並べにリンクを貼りたい
その他(Microsoft Office)
-
12
マクロ:横並びデータを縦並びに変更
Excel(エクセル)
-
13
B列の最終行までA列をオートフィル
Visual Basic(VBA)
-
14
VBA横に並んでいるデータを縦に並ぶデータにしたいです。
Visual Basic(VBA)
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで2行単位のソートの出来...
-
エクセルで日付から日にちを削...
-
エクセルで1列に500行並んだデ...
-
excel:別シートの値を飛び飛び...
-
複数の条件に合う行番号を取得...
-
エクセルVBA C列に特定の文字列...
-
Excelの30個ずつの平均値の出し方
-
エクセルで、重複データを除外...
-
エクセル2016にて、行挿入&コピ...
-
Excelで2つのデータの突合せを...
-
VBA 大きなtxtテキストファ...
-
エクセル~空白のセルのある行...
-
Countifよりも早く重複数をカウ...
-
VBA 数式を最終行までコピー
-
500行の中から、多い順に抽出す...
-
Excel VBA 【QueryTables.Add】...
-
Excel VBA 空白セル以下のデー...
-
excel VBA フィルタでソートし...
-
エクセルの複数のセルを一括で...
-
EXCELで○ヶ月を○年○ヶ月に変換...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
エクセルで1列に500行並んだデ...
-
複数の条件に合う行番号を取得...
-
Excelで2行単位のソートの出来...
-
excel:別シートの値を飛び飛び...
-
Excelの30個ずつの平均値の出し方
-
エクセルで、重複データを除外...
-
Excelで2つのデータの突合せを...
-
Countifよりも早く重複数をカウ...
-
VBA 数式を最終行までコピー
-
エクセルで1つの会社名に対して...
-
エクセル2016にて、行挿入&コピ...
-
エクセルで横並びの複数データ...
-
エクセルVBA C列に特定の文字列...
-
VBA 大きなtxtテキストファ...
-
エクセル~空白のセルのある行...
-
500行の中から、多い順に抽出す...
-
不要な行を消したい
-
本日の日付を超えているものを...
-
【Excel】小計単位で並べ替えを...
おすすめ情報
VBAで出来たら、早いような気がします!よろしくお願いします!
複雑な業務をしているので教えていただきたいのですが、A〜Fのモジュールと比較するために同じようにG〜Iを追加するとモジュールはどうなるでしょうか。よろしくお願いします。
同じような操作を3列おきに行えば良い!そのとおりです!
項目行がありますのでよろしくお願いします。2行目からのコピー&ペーストでお願いします。3列おきに行うやり方も教えて下さい!
Sheet2も1行目が項目行だとして変更してみました。
↓
Shee1の1行目の最初の3列がSheet2の項目行なのですが表示されません!
よろしくお願いします!
前回に頂いていたコードと今回のコードを合わせて編集するとできましたが、for next でlastLowを設定したほうが "A"列の行数より"D"列の行数が多い場合に良さそうです。なので最初にsheet1をsheet2にコピーしてからsheet2の2行目以降をclearContentsするのではなく、最初からsheet1の項目行だけをコピーするやり方が良さそうです。長々とご教授いただきまして有難うございました。できれば、この部分のコードも分かればお願いします。いい勉強になりました。