![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.4ベストアンサー
- 回答日時:
失礼を承知で書きますが、m(_._)m
ひょっとして貴方は YAHOO!知恵袋における 1050224079さんではありませんか?
なぜなら、貴方の質問の内容がが9日前の
https://detail.chiebukuro.yahoo.co.jp/qa/questio …
と瓜二つだから。
でもホントにそうなら、不思議なことに思います。
なぜなら、そこで貴方がベストアンサー(BA)と選定した回答者の kabuto_yhさんのとおりにやれば、ここで再質問することもあるまいに、と思うからです。
当該BAに私が忠実にやってみた結果を添付図に示しておきますネ。
貴方のお蔭で私が勉強させてもらったことを感謝する次第です。
![「Excelで「1,2,3,4,5」を「1」の回答画像4](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/0/298588_6151b57e423c3/M.jpg)
No.8
- 回答日時:
Qchan1962 さんの回答をベースに改変しました。
変数を使い回したため分かりにくいかも。
Function myFunc(trg As String) As String
Dim i As Long
Dim strQ, strA, tmp
Dim iMax As Long
Dim ara
strQ = Split(trg, ",")
iMax = strQ(UBound(strQ))
ReDim ara(0 To iMax) As String
On Error Resume Next
For i = 0 To iMax
ara(i) = " "
Next
For i = 0 To UBound(strQ)
ara(strQ(i)) = "-" & strQ(i)
Next
strA = Join(ara, "")
strA = Replace(strA, " -", " ")
strA = WorksheetFunction.Trim(strA)
strQ = Split(strA, " ")
For i = 0 To UBound(strQ)
If strQ(i) Like "*-*-*" Then
tmp = strQ(i)
strQ(i) = Left(tmp, InStr(tmp, "-")) & Mid(tmp, InStrRev(tmp, "-") + 1)
End If
Next
strA = Join(strQ, ",")
myFunc = strA
End Function
ワークシートに記述するほか
他から呼び出すこともできます。
Debug.Print MyFunc("1,2,3,4,5,10,12,14,16")
No.7
- 回答日時:
したいやりたいばかりで バージョンすら書かない人は困りますね。
=LET(_val,"-9,"&A1&",-9",_arry,FILTERXML("<x><y>"&SUBSTITUTE(_val,",","</y><y>")&"</y></x>","//y"),_cnt,COUNT(_arry),_ary1,INDEX(_arry,SEQUENCE(_cnt-2)),_ary2,INDEX(_arry,SEQUENCE(_cnt-2,,2)),_ary3,INDEX(_arry,SEQUENCE(_cnt-2,,3)),IFERROR(SUBSTITUTE(TEXTJOIN(",",,IF((_ary1+1=_ary2)*(_ary2+1<>_ary3),"-","")&IF((_ary1+1=_ary2)*(_ary2+1=_ary3),"",_ary2)),",-","-"),""))
No.6
- 回答日時:
連投すみません。
#2#5です取り敢えず、最後の文字が数値に変えられない場合は文字そのままが書き込まれますが、ご質問の範囲の仕様で
スプリット最後の値を strA = strA & strQ(UBound(strQ))で加えていますのでループを配列最後まで、ではなく下記の様にしてください。
For i = 0 To UBound(strQ) - 1
なお、数字に変えられない文字入力がある場合、VBEのオプション全般でエラートラップにおいてエラー発生時に中断を選択している場合、#VALUE!が返ります。
この回答へのお礼
お礼日時:2021/09/30 20:47
ご回答ありがとうございました。
私の能力ではまったく理解できませんでした。
VBAの勉強をしないと……
ゆっくり学んで理解していきたいと思います。
ありがとうございました。
No.5
- 回答日時:
furfur様 スレッドをお借りします。
こんばんは、tatsumaru77様
検証ありがとうございます。
やはり、デバッグは時間をかけてやらないと私のスキルではいけない事を
あらためて認識しました。。。
初め(1,2番目)の文字列は気が付いたのですが最後の文字も安易に
strQ(UBound(strQ))にしてしまってました。
UBound(strQ)の時、抜けるとかIf Right(strA, 1) <>を実行しない処理が必要なのかな、、 今Excelで検証できないので申し訳ありません。
#1,#2のFunctionコードは参考程度として
ユーザー定義関数を作成する方法もある事を提案します。
具体的コードについては、スレッドが閉じなければ、就寝前(25時以降)に今一度確認したいと思います。(今見ると違う方法がありそうです)
No.3
- 回答日時:
Qchan1962様
よこから失礼いたします。
MyTESTをこちらで試してみました。
入力が 3,4,8 の時
出力が 3-4,8-8
になります。
正しくは 3-4,8 ではないでしょうか。
![「Excelで「1,2,3,4,5」を「1」の回答画像3](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/b/543026052_6151ac173a2fb/M.png)
No.2
- 回答日時:
すみません
#1には間違え(バグ)があるので訂正させてください
数字でない文字がある場合無視されます。
Function myTEST(trg As Range)
Dim i As Integer
Dim strQ, strA, tmp
strQ = Split(trg.Text, ",")
For i = 0 To UBound(strQ)
On Error Resume Next
tmp = CInt(strQ(i))
If IsNumeric(strQ(i + 1)) Then
If tmp = CInt(strQ(i + 1)) - 1 Then
If Right(strA, 1) <> "-" Then strA = strA & tmp & "-"
Else
If strA = "" Then strA = tmp & "," Else strA = strA & tmp & ","
End If
Else
If Err.Number <> 0 Then Err.Number = 0
End If
Next
strA = strA & strQ(UBound(strQ))
myTEST = strA
End Function
上記の場合
表示したいセルに =myTEST(元のセル)
参考:ユーザー定義関数の作り方
https://valmore.work/excel-vba-function/
m(_ _)m
No.1
- 回答日時:
こんばんは、
関数をあまりよく知らないのですが、
シート関数では、難しそうですね、、多分
ユーザー関数を作成するかVBAで処理するかで・・
参考 ユーザー関数
文字が含まれている場合の処理対応は考えていません。
単純に省かれます。
Function myTEST(trg As Range)
Dim i As Integer
Dim strQ, strA, tmp
Dim flg As Boolean
strQ = Split(trg.Text, ",")
For i = 0 To UBound(strQ)
tmp = CInt(strQ(i))
On Error Resume Next
If tmp = CInt(strQ(i + 1)) - 1 Then flg = True Else flg = False
If flg = True Then
If Right(strA, 1) <> "-" Then strA = strA & tmp & "-"
Else
If strA = "" Then strA = tmp & "," Else strA = strA & tmp & ","
If Err.Number <> 0 Then flg = False: Err.Number = 0
End If
Next
myEnd:
strA = strA & strQ(UBound(strQ))
myTEST = strA
End Function
意味不明な場合は無視してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのセルにユーザー名...
-
ユニクロやGUのシフト管理アプ...
-
メールを返信したら、英語のメ...
-
CSVファイルを添付するときにパ...
-
「@」(アットマーク)の無いメ...
-
LINE TCBというところからLINE...
-
メールのマナー編
-
メールアドレスで上付きのハイフン
-
YahooIDをパスワード形式にした...
-
YouTubeが毎回ログインしないと...
-
インスタの乗っ取り解除につい...
-
iPhoneのiCloudメールなよです...
-
verify@twitter.comから、メー...
-
メールアドレス 上バーの入力...
-
Instagramを
-
インスタの捨て垢で友達のスト...
-
存在しないアドレスにメールを...
-
ログアウトのないサイトからロ...
-
「そのメールアドレスはすでに...
-
携帯電話を解約してもSMSの受信...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルにユーザー名...
-
YouTubeが毎回ログインしないと...
-
YahooIDをパスワード形式にした...
-
インスタの捨て垢で友達のスト...
-
iPhoneのiCloudメールなよです...
-
携帯電話を解約してもSMSの受信...
-
インスタの乗っ取り解除につい...
-
「@」(アットマーク)の無いメ...
-
メールを返信したら、英語のメ...
-
メールアドレスで上付きのハイフン
-
verify@twitter.comから、メー...
-
星の王子さまというアプリで、 ...
-
CSVファイルを添付するときにパ...
-
LINE TCBというところからLINE...
-
メールアドレス 上バーの入力...
-
ユニクロやGUのシフト管理アプ...
-
インスタのアイコンについてるN...
-
インスタのアカウントの消し方...
-
高一男子です 僕が絶対に悪いん...
-
メールをパスワードつきで送る方法
おすすめ情報