
以前、下記の質問をさせていただきました。
エクセルでハイフンで示した数値の範囲を別々の数値へ
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
excel関数で TRUEやFALSEについて
-
検便についてです。 便は取れた...
-
血液検査の結果が悪くefgrの値...
-
2つの数値のうち、数値が小さい...
-
透亮像について。 先日会社の健...
-
リンク先のファイルを開かなく...
-
彼女のことが好きすぎて彼女の...
-
ワードのページ番号をもっと下...
-
EXCELで条件付き書式で空白セル...
-
風俗店へ行く前のご飯
-
小数点以下を繰り上げたものを...
-
【エクセル】0以外が入力され...
-
エクセルのラベルの値(文字列...
-
excelでsin二乗のやり方を教え...
-
胃のレントゲン検査の前日食事...
-
精液の落とし方を教えてください
-
勃起する時って痛いんですか? ...
-
Excelグラフのラベルオプション...
-
値が入っているときだけ計算結...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
血小板増加について
-
彼女のことが好きすぎて彼女の...
-
Excel 数値の前の「 ' 」を一括...
-
病院側から早く来てくださいと...
-
VLOOKUP関数を使用時、検索する...
-
腕を見たら黄色くなってる部分...
-
値が入っているときだけ計算結...
-
リンク先のファイルを開かなく...
-
2つの数値のうち、数値が小さい...
-
風俗店へ行く前のご飯
-
小数点以下を繰り上げたものを...
-
一番多く表示のある値(文字列...
-
MIN関数で空白セルを無視したい...
-
勃起する時って痛いんですか? ...
-
エクセルで空白セルを含む列の...
-
増減表のプラスマイナスの符号...
-
【Excelで「正弦波」のグラフを...
-
エクセルで数式の答えを数値と...
おすすめ情報