質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1549閲覧

エクセルVBAで表の転地について

FredericChopin

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/05/21 03:20

エクセルVBAで縦持ちのデータを横持ちの状態に変えたいのですが、処理が思いつきません。
ご教示いただけますと幸いです。

下記のデータを

aaabbbccc
1aX
1aY
1aZ
2bAA
2bBB
2bZZ
3cXX
3cYY

下記の様に変えたいと思っております。

aaabbbccc
1aX,Y,Z
2bAA,BB,ZZ
3cXX,YY

エクセルのバージョンは2016、OSはwindows10 home 64bitとなります。
恐れ入りますが、ご教示お願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattuwan

2020/05/21 04:04

キーとなる列はaaaだけでいいか、aaaとbbbと2種類になるか、サンプルデータでは判別できません。 どちらでしょうか?
guest

回答2

0

ExcelVBA

1Sub test() 2 Dim a As Range 3 4 Application.ScreenUpdating = False 5 6 ActiveSheet.Range("A1").CurrentRegion.Subtotal 1, xlCount, 3 7 ActiveSheet.Range("A1").CurrentRegion.Subtotal 2, xlCount, 3 8 With ActiveSheet.Range("A1").CurrentRegion 9 For Each a In .Offset(1).Columns(3).SpecialCells(xlCellTypeConstants).Areas 10 On Error GoTo ErrLabel 11 a.Cells(1, 2).Value = Join(WorksheetFunction.Transpose(a), ",") 12 On Error GoTo 0 13 Next 14 .RemoveSubtotal 15 End With 16 ActiveSheet.Range("A1").CurrentRegion.RemoveDuplicates Array(1, 2), xlYes 17 ActiveSheet.Range("A1").CurrentRegion.Offset(1).Columns(3).Delete xlShiftToLeft 18 19 Exit Sub 20 21ErrLabel: 22 a.Cells(1, 2).Value = a.Value 23 Resume Next 24End Sub

こんな感じですかね。
参考になれば。

投稿2020/05/21 09:51

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

下記VBAプログラムをそのまま対象シートへ貼り付けて実行して見て下さい。

Option Explicit '------------------------------------------------- '(運用条件) '読込み範囲:A1~A100/1行目タイトル/空白行出現で終了 '書込み範囲:E1より書込み '------------------------------------------------- Sub Test_Sample_Miniature() '定義Work Dim MySeaArea As Range Dim MyRange As Range Dim blnInitFlag As Boolean Dim blnWriteFlag As Boolean Dim lRow As Long '定義ブレーク Dim strBreakKey As String Dim strBreakA As String Dim strBreakB As String Dim strWorkKey As String '定義書込み位置 Dim MyWrtA As Range Dim MyWrtB As Range Dim MyWrtC As Range '定義-<値の設定>検索範囲セル&書込みセル Set MySeaArea = Range("A2:A100") Set MyWrtA = Range("E1") Set MyWrtB = Range("F1") Set MyWrtC = Range("G1") '初期値設定 blnInitFlag = True strBreakKey = "" '開始 lRow = MyWrtA.Row For Each MyRange In MySeaArea ' '終了処理 If Trim(MyRange) = "" Then Exit For ' '初期処理 blnWriteFlag = True If blnInitFlag = True Then '1行目タイトル Cells(lRow, MyWrtA.Column) = Cells(MyRange.Row - 1, MyRange.Column + 0) Cells(lRow, MyWrtB.Column) = Cells(MyRange.Row - 1, MyRange.Column + 1) Cells(lRow, MyWrtC.Column) = Cells(MyRange.Row - 1, MyRange.Column + 2) '2行目初期 lRow = lRow + 1 Cells(lRow, MyWrtA.Column) = Cells(MyRange.Row, MyRange.Column + 0) Cells(lRow, MyWrtB.Column) = Cells(MyRange.Row, MyRange.Column + 1) Cells(lRow, MyWrtC.Column) = Cells(MyRange.Row, MyRange.Column + 2) strBreakA = Cells(MyRange.Row, MyRange.Column + 0) strBreakB = Cells(MyRange.Row, MyRange.Column + 1) strBreakKey = strBreakA & strBreakB '初期処理完了 blnInitFlag = False blnWriteFlag = False End If ' 'ブレーク処理 If blnWriteFlag = True Then strWorkKey = Cells(MyRange.Row, MyRange.Column + 0) & _ Cells(MyRange.Row, MyRange.Column + 1) If strBreakKey <> strWorkKey Then lRow = lRow + 1 Cells(lRow, MyWrtA.Column) = Cells(MyRange.Row, MyRange.Column + 0) Cells(lRow, MyWrtB.Column) = Cells(MyRange.Row, MyRange.Column + 1) Cells(lRow, MyWrtC.Column) = Cells(MyRange.Row, MyRange.Column + 2) strBreakA = Cells(MyRange.Row, MyRange.Column + 0) strBreakB = Cells(MyRange.Row, MyRange.Column + 1) strBreakKey = strBreakA & strBreakB blnWriteFlag = False End If End If ' '計算・書込み処理 If blnWriteFlag = True Then Cells(lRow, MyWrtC.Column) = Cells(lRow, MyWrtC.Column) & _ "," & _ Cells(MyRange.Row, MyRange.Column + 2) End If ' Next '最終レコード処理(今回は処理なし) If strBreakKey <> "" Then End If 'オブジェクト開放 Set MySeaArea = Nothing Set MyRange = Nothing Set MyWrtA = Nothing Set MyWrtB = Nothing Set MyWrtC = Nothing End Sub

投稿2020/05/21 07:04

編集2020/06/01 05:30
tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FredericChopin

2020/05/22 02:28

処理が簡単でVBA初心者の私にも理解ができる記述でしたのでtosi様をベストアンサーにさせていただきます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問