[[20181117203715]] 『3桁・4桁・6桁の数字を入力した結果の書き換え』(kinnoji35) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『3桁・4桁・6桁の数字を入力した結果の書き換え』(kinnoji35)

はじめまして
どなたか知っている方がいらっしゃいましたらご教授願います。

例えば
セルに
123と打ったら1・2・3
1234と打ったら1・2・34
12345と打ったら1・2・34・56
の様な結果を出したいのですが
文字の入力数に応じて1桁・1桁・2桁・2桁で点を入力したいです。

時間の入力とかの応用ですかね?

わかり辛い説明で申し訳けありませんが宜しくお願いします。

< 使用 Excel:Excel2016、使用 OS:Windows7 >


>>12345と打ったら1・2・34・56
6は何処から来たのでしょうか、無いけど桁揃えの為5+1で追加するのでしょうか
それとも1.2.34.5で良いのでしょうか。。。
などご説明いただくと
たくさんアドバイスがあるかもしれませんね
気が付いた点だけですみません m(__)m

(隠居じーさん) 2018/11/17(土) 22:29


返信ありがとうございます。

こちらの打ち間違いです。
123456と打ったら1・2・34・56の誤りです。
(kinnoji35) 2018/11/18(日) 04:23


 新規BOOKにてお試しを ^^ 。。。
 3,4,6.。。。偶数桁なら多分 ^^; 奇数桁なら。。。当然 .? に m(_ _)m
きっと、もっとスマートなコードが有ると思いますが。
A列が情報、B列が結果です

      A            B                 
   1            1  1                 
   2           12  1.2               
   3          123  1.2.3             
   4         1234  1.2.34            
   5        12345  1.2.34.5          
   6       123456  1.2.34.56         
   7      1234567  1.2.34.56.7       
   8     12345678  1.2.34.56.78      
   9    123456789  1.2.34.56.78.9    
  10   1234567890  1.2.34.56.78.90   

 Option Explicit
 Sub main()
    Dim i As Long
    Dim j As Long
    Dim buf As String
    Dim rr As Range
    Dim r As Range
    Dim y As Long
    Dim cnt As Long
    With Worksheets("Sheet1")
        Set rr = .Range("A1").CurrentRegion
        rr.Range("B1:B" & rr.Rows.Count).ClearContents
        Set rr = .Range("A1").CurrentRegion
        y = 1
        For Each r In rr
            For i = 1 To Len(r)
                cnt = cnt + 1
                Select Case cnt
                    Case 1 To 2
                        j = 1
                    Case Else
                        j = 2
                End Select
                buf = buf & Mid(r, i, j) & "."
                If j = 2 Then i = i + 1
            Next i
            cnt = 0
            .Cells(y, 2).NumberFormatLocal = "@"
            .Cells(y, 2).HorizontalAlignment = xlLeft
            .Cells(y, 2).IndentLevel = 1
            .Cells(y, 2) = Left(buf, Len(buf) - 1)
            buf = ""
            y = y + 1
        Next r
        rr.Columns(2).EntireColumn.AutoFit
    End With
End Sub
(隠居じーさん) 2018/11/18(日) 07:35

>12345と打ったら1・2・34・56
>の様な結果を出したいのですが

どのセルに打ったら、どのセルに結果をだしたいのでしょうか?
実際の操作がイメージできるように説明いただけますか。

(マナ) 2018/11/18(日) 09:56


 3桁・4桁・6桁の3パターンだけだったらA列に数字が入っているとして
 =TEXT(A1,CHOOSE(LEN(A1),,,"0・0・0","0・0・00",,"0・0・00・00"))
(bi) 2018/11/18(日) 10:28

 =TRIM(SUBSTITUTE(TEXT(A1,"?・??・??")," ・",""))

 ※ 3,4,6桁限定
(GobGob) 2018/11/19(月) 09:14

 あ、桁区切り勘違いしてましたw
 回答無視してくださいw
(GobGob) 2018/11/19(月) 09:16

 =LEFT(TEXT(LEFT(A1*1000,6),"0・0・00・00"),LEN(A1)+LEN(A1)/6+2)
 ※仕切り直しw
(GobGob) 2018/11/19(月) 09:31

前ゼロ消えても良ければ、こんな式でも。(というか、1桁だけの場合に前ゼロを付けるか付けないか、どっちなんでしょうね?)
 =IFERROR(VALUE(MID(A1,1,1)),"")&IFERROR("・"&VALUE(MID(A1,2,1)),"")&IFERROR("・"&VALUE(MID(A1,3,2)),"")&IFERROR("・"&VALUE(MID(A1,5,2)),"")

あと、「知っている方」という尋ね方は気に障るので、避けた方が良いかと思います。(「知っている」回答をしたのではなく、貴方の質問を見てから「考えた」のだから)
(???) 2018/11/19(月) 09:40


Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long, s As String
    If Target.Count <> 1 Then Exit Sub
    If Len(Target.Value) > 6 Or Len(Target.Value) < 1 Then Exit Sub
    Application.EnableEvents = False
    For i = 1 To Len(Target.Value)
        s = s & Mid(Target.Value, i, 1)
        If i <> Len(Target.Value) And (i = 1 Or i = 2 Or i = 4) Then s = s & "・"
    Next i
    Target.Value = s
    Application.EnableEvents = True
End Sub
(mm) 2018/11/19(月) 13:48

 >わかり辛い説明で申し訳けありませんが

 ホントだね。
 他の人の結果は見てませんが、こんな感じなんですかねぇ?
 ちゃんしたと法則を書かないで、微々たる事例で判断させようとするからだね・・・。
 私は考える気ないけど。

 1     1
 12     1・2
 123     1・2・3
 1234     1・2・34
 12345     1・2・34・5
 123456     1・2・34・56
 1234567     1・2・34・56・7
 12345678     1・2・34・56・78
 123456789     1・2・34・56・789
 1234567890     1・2・34・56・789・0
 1234567890a     1・2・34・56・789・0a
 1234567890ab     1・2・34・56・789・0ab
 1234567890abc     1・2・34・56・789・0ab・c
 1234567890abcd     1・2・34・56・789・0ab・cd
 1234567890abcde     1・2・34・56・789・0ab・cde
 1234567890abcdef     1・2・34・56・789・0ab・cde・f
 1234567890abcdefg     1・2・34・56・789・0ab・cde・fg
 1234567890abcdefgh     1・2・34・56・789・0ab・cde・fgh
 1234567890abcdefghi     1・2・34・56・789・0ab・cde・fghi
 1234567890abcdefghij     1・2・34・56・789・0ab・cde・fghi・j
 1234567890abcdefghijk     1・2・34・56・789・0ab・cde・fghi・jk
 1234567890abcdefghijkl     1・2・34・56・789・0ab・cde・fghi・jkl
 1234567890abcdefghijklm     1・2・34・56・789・0ab・cde・fghi・jklm
 1234567890abcdefghijklmn     1・2・34・56・789・0ab・cde・fghi・jklm・n
 1234567890abcdefghijklmno     1・2・34・56・789・0ab・cde・fghi・jklm・no
 1234567890abcdefghijklmnop     1・2・34・56・789・0ab・cde・fghi・jklm・nop
 1234567890abcdefghijklmnopq     1・2・34・56・789・0ab・cde・fghi・jklm・nopq
 1234567890abcdefghijklmnopqr     1・2・34・56・789・0ab・cde・fghi・jklm・nopq・r
 1234567890abcdefghijklmnopqrs     1・2・34・56・789・0ab・cde・fghi・jklm・nopq・rs
 1234567890abcdefghijklmnopqrst     1・2・34・56・789・0ab・cde・fghi・jklm・nopq・rst
 1234567890abcdefghijklmnopqrstu     1・2・34・56・789・0ab・cde・fghi・jklm・nopq・rstu
 1234567890abcdefghijklmnopqrstuv     1・2・34・56・789・0ab・cde・fghi・jklm・nopq・rstu・v
 1234567890abcdefghijklmnopqrstuvw     1・2・34・56・789・0ab・cde・fghi・jklm・nopq・rstu・vw
 1234567890abcdefghijklmnopqrstuvwx     1・2・34・56・789・0ab・cde・fghi・jklm・nopq・rstu・vwx
 1234567890abcdefghijklmnopqrstuvwxy     1・2・34・56・789・0ab・cde・fghi・jklm・nopq・rstu・vwxy
 1234567890abcdefghijklmnopqrstuvwxyz     1・2・34・56・789・0ab・cde・fghi・jklm・nopq・rstu・vwxyz

(BJ) 2018/11/19(月) 14:35


もしかしてだけど、タイトルみると、3桁・4桁・6桁の数字といってるから、チェンジイベントで入力値を掴んで、if文で数値として評価できるかで分岐させ、文字数が3,4,6のときをselect caseで分岐するだけですむんじゃなかろうか

(もこな2 ) 2018/11/19(月) 18:51


 >文字数が3,4,6のときをselect caseで分岐するだけですむんじゃなかろうか 

 私としては、それは避けたかったです。
 そもそも、「入力したいです。」と言うことでそちら希望なんでしょうけど。
(BJ) 2018/11/19(月) 20:17

実際のところはどうなんでしょうね。
詳細が示されてないので、これでよいのかわかりませんし、よく見たら類似発想のコードをmmさんが示されてましたけど、作っちゃったんで投稿しておきます。

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim MyRNG As Range

        Application.EnableEvents = False
        For Each MyRNG In Target
            If IsNumeric(MyRNG.Value) Then
                Select Case Len(MyRNG.Value)
                    Case 3: MyRNG.Value = Format((MyRNG.Value), "0・00")
                    Case 4: MyRNG.Value = Format((MyRNG.Value), "0・0・00")
                    Case 6: MyRNG.Value = Format((MyRNG.Value), "0・0・00・00")
                End Select
            End If
        Next
        Application.EnableEvents = True
    End Sub

(もこな2) 2018/11/19(月) 21:05


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.