見出し画像

選択したレコードを指定した列番号の順番でHTMLに縦に表示するChatGPTと一緒に作ったよ

この説明は、ChatGPTで作成しています。

このプロシージャは、Excelのワークシート上で 1行だけのデータ(レコード) を選択した状態で実行するものです。選択したレコードの中から、表示したい項目を順番に指定して、縦向きのHTML形式で表示する仕組みになっています。以下でその詳細を説明します。

プロシージャの流れ

  1. アクティブなシートを取得
    最初に、作業中のシート(アクティブシート)を取得し、プロシージャ内で扱う準備をします。また、シート内のデータが何列まであるかを調べています。

  2. 表示する列を指定する
    ユーザーがInputBoxを通じて、「どの列をどの順番で表示するか」をカンマ区切りで入力します。例えば、"1,3,2" と入力すると、1列目、3列目、2列目の順にデータを表示することになります。

  3. 選択範囲を確認
    現在選択しているデータ範囲が1行のみであるかをチェックしています。もし複数行が選択されている場合は、警告を出して処理を終了します。

  4. 列名とデータの取得
    選択した行のデータと、シートの1行目にある列の名前を取得します。

  5. 表示する列の順番にデータを並べ替える
    ユーザーが指定した列順(displayOrderList)に合わせて、各列名とその内容を順番通りに設定します。

  6. HTMLの作成
    HTML形式で、取得したデータを縦に並べるように設定します。各データの表示には `<div>`タグを使い、列名は太字(<strong>タグ)で表示されます。また、セル内でエラーがある場合は「●エラー●」と表示されるようになっています。

  7. HTMLファイルの作成
    作成したHTMLを一時ファイルとして保存します。

  8. Microsoft Edgeで表示
    保存したHTMLファイルをMicrosoft Edgeで開き、データを縦向きで確認できるようにします。

注意点

  • 列番号の入力: 表示順を指定する際、必ず1~最大列数までの数値をカンマで区切って入力する必要があります。

  • 選択範囲: データは1行分のみを選択している必要があります。

  • Microsoft Edgeのパス: このプロシージャでは、HTMLファイルをEdgeで開くためにEdgeのインストールパスを指定しています。他のブラウザで開きたい場合は、パスを変更してください。


参考リンク

Sub 選択したレコードを指定した項目の順番でHTMLに縦に表示するChatGPT()
    ' アクティブなワークシートを取得
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim displayOrder As String
    Dim displayOrderList As Variant
    Dim lastColumn As Long
    lastColumn = ActiveSheet.Cells(1, ActiveSheet.Columns.count).End(xlToLeft).Column
    displayOrder = InputBox("表示する列番号を半角英数でカンマ区切りでいれてください。(カラム数は1~" & lastColumn & "です):", "列の表示順番")
    '入力値をカンマ区切りで格納
    displayOrderList = Split(displayOrder, ",")
    
    ' 選択範囲を取得
    Dim rng As Range
    Set rng = Application.Selection
    
    ' 単一のレコードが選択されているかを確認
    If rng.Rows.count <> 1 Then
        MsgBox "単一のレコードを選択してください。", vbExclamation
        Exit Sub
    End If
    
    ' 列名を取得
    Dim headers As Variant
    headers = ws.Rows(1).Value ' すべての列名を取得
    
    ' 選択したレコードの値を取得
    Dim recordRow As Variant
    recordRow = ws.Rows(rng.row).Value ' 選択したレコードのすべての値を取得
    
    ' 表示するカラム名と順番を定義 (displayOrderList に基づき displayColumns を設定)
    Dim displayColumns As Variant
    ReDim displayColumns(LBound(displayOrderList) To UBound(displayOrderList))
    Dim i As Integer
    For i = LBound(displayOrderList) To UBound(displayOrderList)
        displayColumns(i) = headers(1, CInt(displayOrderList(i)))
    Next i
    
    ' HTMLを準備
    Dim htmlOutput As String
    htmlOutput = "<html><body>"
    
    Dim j As Integer
    For j = LBound(displayColumns) To UBound(displayColumns)
        For i = LBound(headers, 2) To UBound(headers, 2)
            If headers(1, i) = displayColumns(j) Then
                ' エラー表示を代替テキストに置き換え
                Dim cellValue As String
                If IsError(recordRow(1, i)) Then
                    cellValue = " ●エラー● "
                Else
                    cellValue = recordRow(1, i)
                End If
                
                ' 改行をHTMLの<br>タグに変換
                cellValue = Replace(cellValue, vbLf, "<br>")
                
                ' HTMLに列名とセルの値を追加
                htmlOutput = htmlOutput & "<div><strong>" & headers(1, i) & "</strong></div>"
                htmlOutput = htmlOutput & "<div>" & cellValue & "</div><br>"
                Exit For
            End If
        Next i
    Next j
    
    htmlOutput = htmlOutput & "</body></html>"
    
    ' HTMLを一時ファイルに書き込み
    Dim tempFilePath As String
    tempFilePath = Environ$("temp") & "\temp.html"
    
    Dim fileNum As Integer
    fileNum = FreeFile
    Open tempFilePath For Output As fileNum
    Print #fileNum, htmlOutput
    Close fileNum
    
    ' HTMLファイルをMicrosoft Edgeで開く
    Dim edgePath As String
    edgePath = """C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"""
    
    Dim shellCommand As String
    shellCommand = edgePath & " " & tempFilePath
    Shell shellCommand, vbNormalFocus
End Sub

ハッシュタグ

#excel #できること #vba #選択範囲 #HTML出力 #列順指定 #MicrosoftEdge #一時ファイル #データ表示 #InputBox #列番号指定 #エラーハンドリング #セルデータ取得 #ユーザー指定 #Excel操作 #Excelマクロ #自動化 #列名取得 #データ出力


Translation (English)

Procedure Name: Display Selected Record Vertically in HTML with Specified Order of Items - ChatGPT

This explanation is created by ChatGPT.

This procedure is executed on an Excel worksheet with a single row of data (record) selected. It lets you specify the items to display and their order, then displays them in HTML format in a vertical layout. Here’s a breakdown of its steps.

Procedure Flow

  1. Retrieve the Active Sheet
    It starts by getting the active sheet and determining the total number of columns to work with.

  2. Specify Columns to Display
    Users are prompted with an InputBox to enter column numbers and the order they should appear, separated by commas. For example, entering "1,3,2" would display columns 1, 3, and 2 in that order.

  3. Check Selection Range
    It verifies if the selected range consists of only one row. If multiple rows are selected, it shows a warning and exits.

  4. Retrieve Column Names and Data
    It then retrieves both the row data and the column headers from the first row.

  5. Arrange Data by Display Order
    Based on the user’s specified order (displayOrderList), the procedure organizes each column name and its content accordingly.

  6. Create HTML
    It constructs an HTML format that displays the data vertically, using `<div>` tags. Column names are displayed in bold with the `<strong>` tag, and any errors in cells are represented by "●Error●".

  7. Generate HTML File
    The HTML output is saved as a temporary file.

  8. Display in Microsoft Edge
    Finally, it opens the HTML file in Microsoft Edge for viewing the data in vertical layout.

Notes

  • Column Number Input: Ensure you enter numbers from 1 to the max column, separated by commas.

  • Selection Range: Only one row should be selected.

  • Edge Path: This procedure uses Edge, but you can adjust the browser path if needed.

Reference Links


Hashtags

#excel #capabilities #vba #selectedrange #HTMLoutput #columnorder #MicrosoftEdge #tempfile #datadisplay #InputBox #columninput #errorhandling #celldata #userinput #Excel操作 #Excelmacro #automation #headerretrieval #dataoutput

いいなと思ったら応援しよう!