私は 次のスレッドを見つけたものタイトルが言うと、ちょうど行うための方法を探していました: Excel: Listing Numbers In Between 2 NumbersExcel:一連の間隔の番号を一覧表示するにはどうすればよいですか?
しかし、私の場合は少し異なります。 は、いくつかの整数を入力しますセルがありますコンマやハイフンで区切って、 を複数の間隔で作成します(多くの印刷ダイアログボックスの にある「ページ範囲」フィールドとほぼ同じです)。例えば
:1-3,9-11,17,19,21-22,25
私は結果は以下のように、他のセルではなく、ライン上で分離各 数で返される必要があります:
私はこの使用してExcelネイティブ関数を実行し、一つだけのためにでき間隔 (例:1-9)。それ以上のものについては、数式は機能しません。
このすべてをVBAで達成する方法はありますか?
私はある方向を指摘できますか?
ご迷惑をおかけして申し訳ありません。
よろしく
[更新]
私は数週間のためのコードを使用して、ちょうど私が降順でゼロ、繰り返し数字とも数字を避ける必要が実現しています。
、1,3- 10,8、12,14、16,16 、22、27,24 -30,36、42,39
従って#VALUEが必要です!型付きの数値が昇順でない場合、またはゼロまたは繰り返しの数値が見つかった場合は、エラーメッセージが返されます。
私はこのコードに取り組んでおり、タイプされた間隔(x-y)、 の場合にのみ上記の問題を解決しましたが、コンマで区切られた離散的な数値の解を見つけることはできません。
ご迷惑をおかけして申し訳ありません。
これまでコード:
Function RANGEX(strInput As String) As String
Dim intCurrent As Integer
Dim outputArray() As Variant
Dim intCount As Integer
intCount = 1
For Each i In Split(strInput, ",")
ReDim Preserve outputArray(1 To intCount)
If InStr(i, "-") > 0 Then
If CInt(Split(i, "-")(0)) > 0 And CInt(Split(i, "-")(0)) < CInt(Split(i, "-")(1)) Then
For x = CInt(Split(i, "-")(0)) To CInt(Split(i, "-")(1))
intCurrent = x
ReDim Preserve outputArray(1 To intCount)
outputArray(intCount) = intCurrent
intCount = intCount + 1
Next x
Else
RANGEX = CVErr(xlErrValue)
End If
Else
ReDim Preserve outputArray(1 To intCount)
intCurrent = CInt(i)
outputArray(intCount) = intCurrent
intCount = intCount + 1
End If
Next i
RANGEX = Join(outputArray, ",")
End Function
ちょっと、特定の問題ではなくコーディング全体の運動をしているように聞こえます.VBAで試したことのいくつかの例を挙げることはできますか? – neophlegm
@neophlegmこんにちは申し訳ありません –
こんにちは@neophlegm。ごめんなさい。私は誰もが理解できる方法で私の問題を説明することができなかったと思う。とにかく、私は、他のユーザーがいくつかの文書に変更を要求できるレコードファイルを作成しようとしていました(既に番号が付けられています)。したがって、複数のドキュメントに同じ変更を加えたい場合、その間隔のセルは、Excelのネイティブ関数を使用して作成したエンジンと一緒に動作します。そして唯一欠けているのは、タイトルが言っていることをすることができるVBAの機能です。 –