[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『規則性のあるデータから任意のデータを抽出して横に並べる方法』(か)
少々質問が長くなってしまいますがどうにも困っていてお力をお借りできたらと思います。
A1質問
A2回答
A3回答
A4回答
A5質問
A6回答
A7回答
A8質問
A9回答
A10質問
というように質問1つと回答いくつかで1セット、縦に規則的に並んでいるデータがあります。
このデータを、
A1質問 回答 回答 回答
A2質問 回答 回答
というように最終的にすべて横一列に整理したくいろいろと調べたのですが効率の良いやり方がなかなか思いつきません。
マクロや関数を調べたのですが、なかなか思うようにいかないので教えていただけると幸いです・
< 使用 Excel:Office365、使用 OS:Windows10 >
イメージ図だけ...
__|___A____|___B____|___C____|___D____|___E____|___F____|___G____|___H____|___I____|___J____|___K____|___L____ 1|質問 | 1| 1| 1001| | | | 1| 2| 3| 4| 5 2|回答 | 1| 2| 1002| | | 1|質問 |回答 |回答 |回答 | #N/A 3|回答 | 1| 3| 1003| | | 2|質問 |回答 |回答 | #N/A | #N/A 4|回答 | 1| 4| 1004| | | 3|質問 |回答 | #N/A | #N/A | #N/A 5|質問 | 2| 1| 2001| | | 4|質問 | #N/A | #N/A | #N/A | #N/A 6|回答 | 2| 2| 2002| | | | | | | | 7|回答 | 2| 3| 2003| | | | | | | | 8|質問 | 3| 1| 3001| | | | | | | | 9|回答 | 3| 2| 3002| | | | | | | | 10|質問 | 4| 1| 4001| | | | | | | | ~~~~~~~~~~~~~~~~~~~~~~~~~~この部分の情報を整備しちゃえば ↑こんな感じに数式で参照出来そうだなぁと。
(白茶) 2021/06/17(木) 17:15
>規則性のあるデータ
私の認識だと、提示のものは質問とそれに対する回答の【個数が不規則】で【順番に】並んでいるという状態に見えます。
既にねむねむさんが確認しているところではありますが、例えば↓のようにA列を見れば質問か回答の判断ができ、
【データ】シート ___A__________B_____________ 1 質問 質ああ 2 回答 回ああ 3 回答 回ああ 4 回答 回ああ 5 質問 質いい 6 回答 回いい 7 回答 回いい 8 質問 質うう 9 回答 回うう 10 質問 質ええ
このうち、B列だけを
【組換】シート _____A___________ 1 質ああ 回ああ 回ああ 回ああ 2 質いい 回いい 回いい 3 質うう 回うう 4 質うう
のようにしたいということであれば↓のように、それぞれのグループ?が始まる行と終わる行をしらべ、行列を入れ替えて貼り付けするという考え方もあるとおもいます。
Sub さんぷる() Dim i As Long, 始 As Long, 終 As Long, 出力行 As Long
With Worksheets("データ") 出力行 = 1 For i = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row Step 1 If 始 = 0 Then 始 = i If .Cells(i, "A").Offset(1).Value <> "回答" Then 終 = i
If 終 <> 0 Then .Range(.Cells(始, "B"), .Cells(終, "B")).Copy Worksheets("組換").Cells(出力行, "A").PasteSpecial Paste:=xlPasteValues, Transpose:=True 始 = 0 終 = 0 出力行 = 出力行 + 1 End If Next i End With End Sub
よって興味があれば↑を【ステップ実行】して研究してみてください。
(理解していただきたいので、丸写しして完成!というのはNGとします)
尤も、「マクロや関数を調べた」と仰っているので、できれば数式で解決したいということかもれませんが・・・)
なお、同じ掲示板内ではニックネームは統一されたほうがよいですよ。
別人を装って同じ説明をされてもつまらないでしょう(するほうも手間ですし・・・)
(もこな2) 2021/06/18(金) 13:14
こんばんは! えぇっと、、これはA列に一列ですよね???
こういう時は、配列を作っては格納、、配列を作っては、格納を繰り返します。 で、大きさがわかったら順番に取り出して整列して出力します。。。 こんな↓感じです。。。。何かの参考になれば幸いです。。。
|[A] |[B] |[C] |[D] [1]|質問|回答|回答|回答 [2]|質問|回答|回答| [3]|質問|回答| |
Option Explicit Sub てすと() Dim v As Variant Dim x() As Variant Dim y() As Variant Dim z() As Variant Dim q As Variant Dim i As Long Dim j As Long Dim n As Long Dim k As Long Dim 最大値 As Long v = Sheets("Sheet1").Range("A1").CurrentRegion.Resize(, 1).Value For i = LBound(v, 1) To UBound(v, 1) If v(i, 1) = "質問" Then ReDim Preserve x(n) ReDim Preserve y(n) x(n) = v(i, 1) n = n + 1 k = 0 ElseIf v(i, 1) = "回答" Then ReDim Preserve z(k) z(k) = v(i, 1) k = k + 1 y(n - 1) = z If 最大値 < k Then 最大値 = k End If Next ReDim q(1 To n, 1 To 最大値 + 1) For i = LBound(q, 1) To UBound(q, 1) If Not IsEmpty(y(i - 1)) Then z = y(i - 1) q(i, 1) = x(i - 1) For j = LBound(z) To UBound(z) q(i, j + 2) = z(j) Next End If Next With Sheets("Sheet2") .Cells.Clear .Range("A1").Resize(UBound(q, 1), UBound(q, 2)).Value = q End With Erase v, x, y, z, q End Sub (SoulMan) 2021/06/18(金) 20:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.