Excel の数式を使用してこれを行う方法は考えられません。明示的に言及していませんが、VBA を使用して解決策を得ることができます。
OLEObjects
オブジェクトのメンバーであるコレクションを介してこれらのチェックボックスにアクセスできる必要がありWorksheet
ます。次にprogID
、各オブジェクトの をチェックして、それが HTML チェックボックス ( Forms.HTML:Checkbox.1
) であるかどうかを確認し、そうである場合はその値を書き留めます。
HTMLチェックボックスを検索Sheet1
し、次のように3つの要素を含む文字列配列でコレクションを埋めるサンプルコードを次に示します。
たとえば、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