VBAマクロを自動作成する無料アプリ

VBAコードの知識不要😊ChatGPTで機能を追加

MENU

【ノーコード】横持ちの表を縦持ちに変換する

エクセルVBAマクロを自動作成する無料アプリです。

例として、アプリで「横持ちの表を縦持ちに変換する」VBAマクロを作成します。

事例  横持ち表を、データの右上B2セルを基準に縦持ちに変換

※ 列の見出しが同じ内容(例:日付、金額、伝票番号の繰り返しではなく、異なる(例:第1四半期、第2四半期、第3四半期、第4四半期)場合は、クロス集計表変換を利用します。


マクロを実行すると、縦持ちに変換されました。

アプリの設定

アプリのトップページ

 ⇒▼表形式の変換

 ⇒【ツール】横持ちデータを、縦持ちデータにする

 

 

【ポイント】

■ データ領域の左上セルは、見出しを除いたデータ部分です。

表示されるVBAコード 

アプリで作成されたコードを、VBE画面に貼り付ければ、マクロの完成です。

 

VBAコードを見る

Sub デモ() '横持データを、縦持リストに転記 
Application.ScreenUpdating = False ' 画面描画を停止
Application.DisplayAlerts = False  ' 警告表示を停止
 ' 入力データの範囲を指定
Dim セル範囲 As Range, 右下セル As String
Sheets("Sheet1").Select
Range("b2").CurrentRegion.Select
右下セル = Selection.Item(Selection.Count).Address(False, False)
Set セル範囲 = Range("b2" & ":" & 右下セル)
' 入力データを配列に読み込み
Dim 入力配列 As Variant
入力配列 = セル範囲.Value
' 出力データを格納する動的配列を作成
Dim 出力配列() As Variant
ReDim 出力配列(1 To UBound(入力配列, 1) * (UBound(入力配列, 2) / 3), 1 To 3)
' 入力配列の各列に対してループ
Dim 出力行 As Long
出力行 = 1
Dim 列 As Long
For 列 = 1 To UBound(入力配列, 2) Step 3
    ' 入力配列の各行に対してループ
    Dim 行 As Long
    For 行 = 1 To UBound(入力配列, 1)
            出力配列(出力行, 1) = 入力配列(行, 列 + 0)
            出力配列(出力行, 2) = 入力配列(行, 列 + 1)
            出力配列(出力行, 3) = 入力配列(行, 列 + 2)
        出力行 = 出力行 + 1
    Next 行
Next 列
    Dim 見出し行 As Long
    Range("b2").Select
    見出し行 = Selection.Row - Selection.End(xlUp).Row
If Sheets("Sheet1").Range("b2").Column = 1 Then
    GoTo Continue
End If
If Sheets("Sheet1").Range("b2").Offset(0, -1) <> "" Then
    Dim 見出し列 As Long
    見出し列 = Selection.Column - Selection.End(xlToLeft).Column
    '見出し列の転記
    Sheets("Sheet1").Range("b2").Offset(0, -1).Select
    Range(Selection, Selection.End(xlDown).End(xlToLeft)).Copy
    Worksheets("sheet2").Select
    Range("a1").Offset(見出し行, 0).Resize(UBound(出力配列, 1), 1).PasteSpecial Paste:=xlPasteAll
    '見出し行の転記
    Worksheets("Sheet1").Range("b2").Offset(-見出し行, -見出し列).Resize(見出し行, 見出し列 + 3).Copy
    Worksheets("sheet2").Range("a1").Resize(, 3).PasteSpecial Paste:=xlPasteAll
    '出力配列を指定範囲に出力
    Worksheets("sheet2").Range("a1").Offset(見出し行, 見出し列).Resize(UBound(出力配列, 1), UBound(出力配列, 2)).Value = 出力配列
    '指定範囲に罫線
    Worksheets("sheet2").Range("a1").Offset(見出し行, 見出し列).Resize(UBound(出力配列, 1), UBound(出力配列, 2)).Borders.LineStyle = xlContinuous
    GoTo Continue2
End If
Continue:
    '見出し行の転記
    Worksheets("Sheet1").Range("b2").Offset(-見出し行, 0).Resize(見出し行, 3).Copy
    Worksheets("sheet2").Select
    Range("a1").PasteSpecial Paste:=xlPasteAll
    ' 出力配列を指定範囲に出力
    Worksheets("sheet2").Range("a1").Offset(見出し行, 0).Resize(UBound(出力配列, 1), UBound(出力配列, 2)).Value = 出力配列
    '指定範囲に罫線
    Worksheets("sheet2").Range("a1").Offset(見出し行, 0).Resize(UBound(出力配列, 1), UBound(出力配列, 2)).Borders.LineStyle = xlContinuous
Continue2:
Application.DisplayAlerts = True   ' 警告表示を再開
Application.ScreenUpdating = True  ' 画面描画を再開
End Sub


 

 上記の「データ列数」が1列の場合はこちら

【ノーコードVBA】クロス集計表(マトリックス・ピボット)をリスト形式に変換する - 【新発想】ノーコードでExcelを自動化する無料ツール

 

 

 

ChatGPTで修正

あなたが自動化したい内容と事例が少し異なる場合は、無料で使えるマイクロソフトの「BingAIチャット」でコードを修正します。とても簡単です!

アプリはこちらから↓↓↓↓