以前、下記の質問をさせていただきました。
エクセルでハイフンで示した数値の範囲を別々の数値へ
http://oshiete.goo.ne.jp/qa/8192454.html
これの逆をやりたいと思い、下記のように改造してみました。
例:1,2,3,5,7,8,9,10,12→1-3,5,7-10,12
しかし#VALUE!になってしまいます。
どこがおかしいのか色々試してみましたが、分かりません。
どなたかご教授頂けると幸いです。
Function hSample(sData As String) As String
sOne = Split(sData, ",")
For i = 0 To UBound(sOne)
For j = 1 To 255
If Int(sOne(i)) + j <> Int(sOne(i + j)) Then
ElseIf j > 1 Then
sOne(i) = sOne(i) & "-" & sOne(i) + j
Exit For
End If
Next j
hSample = hSample & "," & sOne(i)
Next i
hSample = Right(hSample, Len(hSample) - 1)
End Function
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
連続が3つ以上の時に "-" を使うという事で
例) 1,2,4,5,6 → 1,2,4-6
Public Function hSample(sSrc As String) As String
Dim v As Variant
Dim i As Long
Dim sS As String, sE As String, sSep As String
hSample = sSrc
v = Split(sSrc, ",")
If (UBound(v) < 0) Then Exit Function
sS = v(0)
sE = sS
sSep = ","
For i = 1 To UBound(v)
If (v(i) - v(i - 1) = 1) Then
sS = sE & sSep & v(i)
sSep = "-"
Else
sS = sS & "," & v(i)
sE = sS
sSep = ","
End If
Next
hSample = sS
End Function
蛇足)いろいろな書き方を見るのも良いのかな、ということで
Public Function fSample(sSrc As String) As String
Dim v As Variant
Dim i As Long, j As Long, k As Long
Dim sS As String
fSample = sSrc
v = Split(sSrc, ",")
If (UBound(v) < 0) Then Exit Function
For i = 0 To UBound(v)
k = InStr(v(i), "-")
If (k > 0) Then
sS = ""
For j = Left(v(i), k - 1) To Mid(v(i), k + 1)
sS = sS & "," & j
Next
v(i) = Mid(sS, 2)
End If
Next
fSample = Join(v, ",")
End Function
※ 双方とも暗黙的な型変換を使ってみました。
(型変換は明示的にした方が良さそうですけど)
No.2
- 回答日時:
こんばんは
>例:1,2,3,5,7,8,9,10,12→1-3,5,7-10,12
こんなことかな?
Function hSample(sData As String) As String
Dim sOne As Variant, strEnd As String, i As Long
sOne = Split(sData, ",")
hSample = sOne(0)
strEnd = hSample
For i = 1 To UBound(sOne)
If Int(sOne(i - 1)) + 1 <> Int(sOne(i)) Then
hSample = hSample & "," & Int(sOne(i))
strEnd = hSample
Else
hSample = strEnd & "-" & Int(sOne(i))
End If
Next
End Function
No.1
- 回答日時:
まず、hSampleが初期化されていません。
次に
For j=1 To 255
のところですが、
i=UBound(sOne)のときにsOne(i+1)の値は・・・・ありませんよね?
もう一つ、
For i = 0 To UBound(sOne)
とやると
結果は、
1-3,2-3,3,・・・・
となってしまう気がします。
もう少し、工夫が必要のようですね
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
白血球が多いとどんな心配があ...
-
至急!尿検査前日にオナニーし...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
尿検査の前日は自慰控えたほう...
-
EXCELで条件付き書式で空白セル...
-
腕を見たら黄色くなってる部分...
-
2つの数値のうち、数値が小さい...
-
勃起する時って痛いんですか? ...
-
EXCELで式からグラフを描くには?
-
精子が黄色?
-
飽和演算、ラップアラウンド演...
-
値が入っている一番右のセル位...
-
尿検査前日に自慰行為した時の...
-
リンク先のファイルを開かなく...
-
エクセル指定した範囲からラン...
-
excelでsin二乗のやり方を教え...
-
これって喉仏ですか? 私は女性...
-
口の中に黒い血の塊
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
白血球が多いとどんな心配があ...
-
中出しをするとお腹が痛い・・・。
-
射精をして1週間以内に尿検査を...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
変な話しになります。尿検査で...
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
男です。昨日の午後3時くらいに...
-
今朝、毎朝の習慣でオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
1日前の検尿
-
値が入っているときだけ計算結...
-
精子が黄色?
おすすめ情報