| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「Excel VBA ワークシートをHTMLテーブル」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Excel VBA ==Excel VBA ワークシートをHTMLテーブル== <pre> Option Explicit Public Function MakeHtmlTable(table As Range) As String Dim buf As String…」)
 
1行目: 1行目:
 
[[Excel VBA]]
 
[[Excel VBA]]
 
==Excel VBA ワークシートをHTMLテーブル==
 
==Excel VBA ワークシートをHTMLテーブル==
<pre>
+
<pre>Option Explicit
Option Explicit
+
 
+
 
+
Public Function MakeHtmlTable(table As Range, headerType As String, headerSize As Integer, cls As String) As String
Public Function MakeHtmlTable(table As Range) As String
 
 
     Dim buf As String
 
     Dim buf As String
 
     Dim cl As Range
 
     Dim cl As Range
11行目: 10行目:
 
     Dim isFirstRow As Boolean
 
     Dim isFirstRow As Boolean
 
     Dim celVal As String
 
     Dim celVal As String
 +
    Dim colPos As Integer
 +
    Dim isColHeader As Boolean
 +
    Dim isRowHeader As Boolean
 +
    Dim celTag As String
 
      
 
      
 +
    If Trim(cls) <> "" Then
 +
        cls = " class=""" & cls & """ "
 +
    Else
 +
        cls = " border=""1"" "
 +
    End If
 +
   
 +
    isColHeader = InStr(headerType, "c") > 0
 +
    isRowHeader = InStr(headerType, "r") > 0
 
      
 
      
 
     isFirstRow = True
 
     isFirstRow = True
 
     rowPos = -1
 
     rowPos = -1
     buf = "<table border=""1"">"
+
     buf = "<table " & cls & ">"
 
     For Each cl In table
 
     For Each cl In table
         If rowPos <> cl.row Then
+
   
 +
         If rowPos <> cl.Row Then
 
             If Not isFirstRow Then
 
             If Not isFirstRow Then
 
                 buf = buf & "</tr>"
 
                 buf = buf & "</tr>"
23行目: 35行目:
 
             buf = buf & "<tr>"
 
             buf = buf & "<tr>"
 
             isFirstRow = False
 
             isFirstRow = False
 +
            colPos = 0
 
         End If
 
         End If
 
          
 
          
 
         celVal = EscapeHtmlSpecial(cl.text)
 
         celVal = EscapeHtmlSpecial(cl.text)
 
         If Trim(celVal) = "" Then
 
         If Trim(celVal) = "" Then
             celVal = "&nbsp;"
+
             celVal = " "
 
         End If
 
         End If
 
          
 
          
         rowPos = cl.row
+
         rowPos = cl.Row
         buf = buf & "<td>" & celVal & "</td>"
+
          
 +
        If (isColHeader And headerSize > colPos) Or _
 +
          (isRowHeader And headerSize > rowPos) Then
 +
            celTag = "th"
 +
        Else
 +
            celTag = "td"
 +
           
 +
        End If
 +
        buf = buf & EncloseTag(celVal, celTag)
 +
        colPos = colPos + 1
 
     Next
 
     Next
 
     buf = buf & "</table>"
 
     buf = buf & "</table>"
 
+
 
     MakeHtmlTable = buf
 
     MakeHtmlTable = buf
 
+
 +
End Function
 +
Public Function EncloseTag(value As String, tag As String)
 +
    EncloseTag = "<" & tag & ">" & value & "</" & tag & ">"
 
End Function
 
End Function
 
+
 
 
 
Public Function EscapeHtmlSpecial(text As String) As String
 
Public Function EscapeHtmlSpecial(text As String) As String
 
     Dim buf As String
 
     Dim buf As String
50行目: 74行目:
 
         Select Case c
 
         Select Case c
 
         Case "&"
 
         Case "&"
             c = "&amp;"
+
             c = "&"
 
         Case "<"
 
         Case "<"
             c = "&lt;"
+
             c = "<"
 
         Case ">"
 
         Case ">"
             c = "&gt;"
+
             c = ">"
 
         Case """"
 
         Case """"
             c = "'&quot;"
+
             c = "'"""
 
         End Select
 
         End Select
 
      
 
      

2022年3月5日 (土) 02:26時点における版

Excel VBA

Excel VBA ワークシートをHTMLテーブル

Option Explicit
 
 
Public Function MakeHtmlTable(table As Range, headerType As String, headerSize As Integer, cls As String) As String
    Dim buf As String
    Dim cl As Range
    Dim rowPos As Integer
    Dim isFirstRow As Boolean
    Dim celVal As String
    Dim colPos As Integer
    Dim isColHeader As Boolean
    Dim isRowHeader As Boolean
    Dim celTag As String
    
    If Trim(cls) <> "" Then
        cls = " class=""" & cls & """ "
    Else
        cls = " border=""1"" "
    End If
    
    isColHeader = InStr(headerType, "c") > 0
    isRowHeader = InStr(headerType, "r") > 0
    
    isFirstRow = True
    rowPos = -1
    buf = "<table " & cls & ">"
    For Each cl In table
    
        If rowPos <> cl.Row Then
            If Not isFirstRow Then
                buf = buf & "</tr>"
            End If
            buf = buf & "<tr>"
            isFirstRow = False
            colPos = 0
        End If
        
        celVal = EscapeHtmlSpecial(cl.text)
        If Trim(celVal) = "" Then
            celVal = " "
        End If
        
        rowPos = cl.Row
        
        If (isColHeader And headerSize > colPos) Or _
           (isRowHeader And headerSize > rowPos) Then
            celTag = "th"
        Else
            celTag = "td"
            
        End If
        buf = buf & EncloseTag(celVal, celTag)
        colPos = colPos + 1
    Next
    buf = buf & "</table>"
 
    MakeHtmlTable = buf
 
End Function
Public Function EncloseTag(value As String, tag As String)
    EncloseTag = "<" & tag & ">" & value & "</" & tag & ">"
End Function
 
Public Function EscapeHtmlSpecial(text As String) As String
    Dim buf As String
    Dim c As String
    Dim i As Integer
    
    For i = 1 To Len(text)
        c = Mid(text, i, 1)
    
        Select Case c
        Case "&"
            c = "&"
        Case "<"
            c = "<"
        Case ">"
            c = ">"
        Case """"
            c = "'"""
        End Select
    
        buf = buf & c
    Next
        
    EscapeHtmlSpecial = buf
End Function