選択したレコードを指定した列番号の順番でHTMLに縦に表示するChatGPTと一緒に作ったよ
この説明は、ChatGPTで作成しています。
このプロシージャは、Excelのワークシート上で 1行だけのデータ(レコード) を選択した状態で実行するものです。選択したレコードの中から、表示したい項目を順番に指定して、縦向きのHTML形式で表示する仕組みになっています。以下でその詳細を説明します。
プロシージャの流れ
アクティブなシートを取得
最初に、作業中のシート(アクティブシート)を取得し、プロシージャ内で扱う準備をします。また、シート内のデータが何列まであるかを調べています。表示する列を指定する
ユーザーがInputBoxを通じて、「どの列をどの順番で表示するか」をカンマ区切りで入力します。例えば、"1,3,2" と入力すると、1列目、3列目、2列目の順にデータを表示することになります。選択範囲を確認
現在選択しているデータ範囲が1行のみであるかをチェックしています。もし複数行が選択されている場合は、警告を出して処理を終了します。列名とデータの取得
選択した行のデータと、シートの1行目にある列の名前を取得します。表示する列の順番にデータを並べ替える
ユーザーが指定した列順(displayOrderList)に合わせて、各列名とその内容を順番通りに設定します。HTMLの作成
HTML形式で、取得したデータを縦に並べるように設定します。各データの表示には `<div>`タグを使い、列名は太字(<strong>タグ)で表示されます。また、セル内でエラーがある場合は「●エラー●」と表示されるようになっています。HTMLファイルの作成
作成したHTMLを一時ファイルとして保存します。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
Retrieve the Active Sheet
It starts by getting the active sheet and determining the total number of columns to work with.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.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.Retrieve Column Names and Data
It then retrieves both the row data and the column headers from the first row.Arrange Data by Display Order
Based on the user’s specified order (displayOrderList), the procedure organizes each column name and its content accordingly.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●".Generate HTML File
The HTML output is saved as a temporary file.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