アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルで以下のような表のデータがあります。
列名は左から順に、名前、会期、講座名、曜日、時間帯、回数、備考 の7つです
 |A |B | C | D | E |F| G |
1|山田|春|演劇| 火 |午前|4|先着順|
2|田中|夏|手芸| 木 |午後|6| 抽選 |
3|山田|夏|柔道| 月 |午後|3|    |
4|田中|春|演劇| 火 |午前|4|先着順|
5|山田|春|華道| 未定|  |2|抽選 |

※3番目のデータのG列(備考)は空白です。
 5番目のデータのE列(時間帯)は空白です。

これを別シートで次のように横に並べたいのです。

| A |B | C | D| E |F | G | H| I |J | K | L|M|N| O | P |Q|R|S|
1|山田|春|演劇|火|午前|4|先着順|夏|柔道|月|午後|3| |春|華道|未定||2|抽選
2|田中|夏|手芸|木|午後|6| 抽選 |春|演劇|火|午前|4|先着順|
 
他の方の質問(果物を例に挙げたもの)で、果物、個数、金額のデータが3つのものの並び替えを行う方法の回答(マクロ)は拝見したのですが、要素が増えた場合はどう対応すればよいのかが判りません。
また、上記の例のように要素の中で空白値のものがある場合がある場合にもマクロで上記のような並び替えは可能なのでしょうか?
実際のデータ数はもっと多く、人によって数もちがうため、手作業でやるには限界を感じています。
マクロがほとんどわからない人間がやろうとするには無謀なことだとは承知しているのですがどなたかお力を貸していただけないでしょうか?
よろしくお願いします。

A 回答 (3件)

No.2です。



投稿後間違いに気づきました。
前回のコードの
>.Cells(i, "B").Resize(, 6).Copy wS.Cells(i, myCol)
の行を
>.Cells(k, "B").Resize(, 6).Copy wS.Cells(i, myCol)
に変更してください。


Sheet1の行番号とSheet2の行番号を間違えていました。
(「i」と「k」の間違い)

検証せずに投稿してごめんなさい。m(_ _)m
    • good
    • 0
この回答へのお礼

>tomo04さま
まさか昨日のうちに回答をいただけるとは思っていなかったため確認が遅くなって申し訳ありませんでした。
今試してみたところ、まさに思った通りのことができました。
実際にはもっとデータの件数が多いので手作業ではとても…と思っていただけに感動です。
本当にありがとうございました。
今はただtomo04さまが作ってくださったものをそのまま使うしかできませんが、これを機に勉強したいと思います。
重ねてお礼申し上げます。

お礼日時:2017/07/01 00:15

こんばんは!



VBA向きの質問ですね。

↓の画像のように元データはSheet1にあり、Sheet2に表示するとします。
Sheet1の1行目は項目行になっているという前提です。

標準モジュールにしてください。

Sub Sample1() '//この行から//
Dim i As Long, k As Long, cnt As Long
Dim myCol As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS.Cells.Clear
With Worksheets("Sheet1")
.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS.Range("A1"), unique:=True
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
For k = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
If .Cells(k, "A") = wS.Cells(i, "A") Then
cnt = cnt + 1
myCol = 6 * (cnt - 1) + 2
If wS.Cells(1, myCol) = "" Then
.Cells(1, "B").Resize(, 6).Copy wS.Cells(1, myCol)
End If
.Cells(i, "B").Resize(, 6).Copy wS.Cells(i, myCol)
End If
Next k
cnt = 0
Next i
wS.Columns.AutoFit
wS.Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub '//この行まで//

上記マクロを実行すると
画像のような感じになります。

※ データ変更があるたびにマクロを実行する必要があります。m(_ _)m
「エクセルで縦に並んだ7つのデータを横に並」の回答画像2
    • good
    • 0

表変換に意味が感じられない内容なので、関数では無理でしょう。


この変換法則を文章化(プログラム化)できるならば、
マクロ化も簡単でしょう。コマンドや記述形式を整えるだけなので。
例えば、空白と無効セルはどのように区別するのか、などです。
ご参考まで。
    • good
    • 0
この回答へのお礼

>angkor_hさま
アドバイスをどうもありがとうございました。
知識がなさ過ぎて独力何とかできそうになかったのでこちらで質問させていただきました。
これを機に勉強したいと思います。

お礼日時:2017/07/01 00:17

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