0

内部アプリケーションの 1 つの HTML テーブルからコピーされたスプレッドシートがあります。テーブルは Excel (2010) に貼り付けられ、True/False 値のチェックボックスがあります。1800 以上のチェックボックスがあり、スプレッドシートの読み込みに時間がかかります。

これらをはい/いいえの値にすばやく変換するにはどうすればよいですか?

新しい列を作成して IF ステートメントを挿入しようとしましたが、結果は常に false でした。チェックボックスの値ではなく、セルの値を参照したと思います。チェックボックスには、「HTMLCheckbox1」...「HTMLCheckbox1824」のような名前が付いています。

4

1 に答える 1

2

Excel の数式を使用してこれを行う方法は考えられません。明示的に言及していませんが、VBA を使用して解決策を得ることができます。

OLEObjectsオブジェクトのメンバーであるコレクションを介してこれらのチェックボックスにアクセスできる必要がありWorksheetます。次にprogID、各オブジェクトの をチェックして、それが HTML チェックボックス ( Forms.HTML:Checkbox.1) であるかどうかを確認し、そうである場合はその値を書き留めます。

HTMLチェックボックスを検索Sheet1し、次のように3つの要素を含む文字列配列でコレクションを埋めるサンプルコードを次に示します。

  • HTMLName
  • 価値
  • チェック済み

たとえば、HTML<input type="checkbox" name="sports" value="soccer" />は次のようになります。

  • HTML名: 「スポーツ」
  • 値: 「サッカー」
  • チェック済み: チェックされているかどうかに応じて「TRUE」または「FALSE」

このコレクションは に書き込まれSheet2ます。チェックボックスの値は文字列に変換されます。

Sub GetCheckBoxValues()

    Dim colCheckboxValues As Collection

    Set colCheckboxValues = GetCheckBoxValuesFromSheet(Sheet1)

    Dim lCount As Long

    For lCount = 1 To colCheckboxValues.Count

        Sheet2.Cells(lCount, 1).Value = colCheckboxValues.Item(lCount)(0) 'HTMLName
        Sheet2.Cells(lCount, 2).Value = colCheckboxValues.Item(lCount)(1) 'Value
        Sheet2.Cells(lCount, 3).Value = colCheckboxValues.Item(lCount)(2) 'Checked (or unchecked)

    Next lCount

End Sub


Function GetCheckBoxValuesFromSheet(sht As Worksheet) As Collection

    Const HTMLCheckBoxProgID As String = "Forms.HTML:Checkbox.1"

    Dim colCheckBoxes As Collection
    Set colCheckBoxes = New Collection

    Dim oOLEObject As OLEObject

    Dim lCount As Long
    lCount = 0

    For Each oOLEObject In sht.OLEObjects

        If oOLEObject.progID = HTMLCheckBoxProgID Then

            Dim sCheckBoxData(2) As String

            sCheckBoxData(0) = oOLEObject.Object.HTMLName
            sCheckBoxData(1) = oOLEObject.Object.Value
            sCheckBoxData(2) = oOLEObject.Object.Checked

            lCount = lCount + 1

            colCheckBoxes.Add Item:=sCheckBoxData, Key:="CheckBox" & CStr(lCount)

        End If

    Next oOLEObject

    Set GetCheckBoxValuesFromSheet = colCheckBoxes

End Function
于 2012-08-10T16:05:25.910 に答える