0

ユーザーは最初のセットで最大15個のアイテムを選択できるため、サイズが不明な範囲を埋めようとしています。これは特定の行に挿入されます。

次の名前/値のチェックボックスがあります。

Name         Value
==========   =====
chk_week1    1
chk_week2    2
...          ...
...          ...
chk_week15   15

たとえば、ユーザーがchk_week1chk_week2chk_week4chk_week5を選択した場合は、1,2,4,5としてセルに挿入する必要があります。

私はそれをよりよく示すためにどのように見えるかという画像を含めました:

ここに画像の説明を入力してください

各チェックボックスには、上の表にリストされている名前と値があります。これまでに使用しているコードは次のとおりです。

Private Sub btnSubmit_Click()

Dim ws As Worksheet
Dim rng1 As Range
Set ws = Worksheets("main")

' Copy the data to the database
' Get last empty cell in column A
Set rng1 = ws.Cells(Rows.Count, "a").End(xlUp)

deptCodeSplit = Split(cbo_deptCode.Value, " ")

' Having difficulty adding the code here
' rng1.Offset(1, 6) = weeks

End Sub
4

1 に答える 1

1

マークされたチェックボックスの値は、Linkedcellに表示されます。両方ともチェックボックスのプロパティから割り当てることができます。

個別のチェックボックスごとに1〜15の値を割り当てましょう。リンクされたセルは、セルA1〜A15にあり、チェックされたチェックボックスには1〜15の一意の値があり、選択されていないチェックボックスには空白です。

列Bの対応するセルは、順次マージに使用されます。

B1:

=IF(A1<>"",A1,"") 

B2からBn:

=IF(AND(A2<>"",B1<>""),B1&" ,"&A2,IF(AND(B1="",A2<>""),A2,B1))

数式は無期限に下向きにコピーできます。必要な文字列は最後の行にあります。

VBAで同じことを達成するには:

Function ValuesFromRange(Rng As range, Optional Delimiter As String)

Dim c As range
Dim txt As String

If Delimiter = "" Then Delimiter = ","
  txt = ""

   For Each c In Rng
     If Len(c.Value) > 0 Then
       If Len(txt) = 0 Then
          txt = c.Value
        Else
          txt = Trim(txt) & Delimiter & c.Value
        End If
     End If
   Next

 ValuesFromRange = txt

End Function

スプレッドシートの例: http ://www.bumpclub.ee/~jyri_r/Excel/ValuesFromRange.xls

于 2012-10-29T12:21:19.943 に答える