[[20020510214147]] 『セルにある特定の数字を打つと別のセルに特定の文』(taiyo) ページの最後に飛ぶ

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

 

『セルにある特定の数字を打つと別のセルに特定の文字が現れるように』(taiyo)

通し番号で1〜160迄の数字があり、その数字にはそれぞれ対応した文字があります。

A1のセルに「1」と入力するとB1のセルに「S15」という文字が現れる、A2に2と入力するとB2に「T50」というようにしたいです。


 Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    Application.EnableEvents = False

    Dim str(1 To 160) As String

    str(1) = "dmy001"

    str(2) = "dmy002"

    str(3) = "dmy003"

    str(4) = "dmy004"

    str(5) = "dmy005"

    str(6) = "dmy006"

    str(7) = "dmy007"

    str(8) = "dmy008"

    str(9) = "dmy009"

    str(10) = "dmy010"

    str(11) = "dmy011"

    str(12) = "dmy012"

    str(13) = "dmy013"

    str(14) = "dmy014"

    str(15) = "dmy015"

    str(16) = "dmy016"

    str(17) = "dmy017"

    str(18) = "dmy018"

    str(19) = "dmy019"

    str(20) = "dmy020"

    str(30) = "dmy030"

    str(40) = "dmy040"

    str(50) = "dmy050"

    str(60) = "dmy060"

    str(70) = "dmy070"

    str(80) = "dmy080"

    str(90) = "dmy090"

    str(100) = "dmy100"

    str(110) = "dmy110"

    str(120) = "dmy120"

    str(130) = "dmy130"

    str(140) = "dmy140"

    str(150) = "dmy150"

    str(160) = "dmy160"

    With Target

    If .Column = 1 Then

        On Error Resume Next

        If .Value = "" Then

            .Offset(0, 1).ClearContents

        ElseIf 0 < .Value And .Value < 161 Then

            .Offset(0, 1).Value = str(.Value)

        End If

    End If

    End With

    Application.EnableEvents = True

 End Sub


 ↑をコピーして、エクセルメニューの ツール>マクロ>Visual Basic Editor

 左窓ののSheet1(Sheet1)をダブルクリック。

 開いたウィンドウへ貼り付けてください。

 あとはシート1でA列に1〜160の数値を打てば、B列にdmyxxxを出力します。

 ↑のコードでは、1ならdmy001、160ならdmy160を出力するので、

 ご自分の仕様に合わせて修整してください。

 あと面倒だったので、20以降10跳びにしてますけど、例に習って入力してください(汗)。

 (ramrun)


『rumrunさん、200205102141の質問でさらに質問があります』(taiyo)

早速教えていただいて有り難うございました。

教えていただいたテキストの中で、A列、B列等はどの部分で決まっているのでしょうか?

B1にD1が対応している等いろいろ編集したいのですが教えて下さい。


 *1  If .Column = 1 Then

         On Error Resume Next

         If .Value = "" Then

 *2          .Offset(0, 1).ClearContents

         ElseIf 0 < .Value And .Value < 161 Then

 *2          .Offset(0, 1).Value = str(.Value)

         End If

     End If

 *1の列でA列を指定しています。

 A列は.Column = 1、B列なら.Column = 2、C列なら.Column = 3、、、というように

 順番です。

 それに対して、*2が.offset(0, 1).というので右に1個セルをずらしています。

 A列に対して右に1個ずらすわけですから、B列ということになります。

  If .Column = 1 or .Column = 4 or .Column = 7 Then

      On Error Resume Next

      If .Value = "" Then

          .Offset(0, 1).ClearContents

      ElseIf 0 < .Value And .Value < 161 Then

          .Offset(0, 1).Value = str(.Value)

      End If

  End If

 とすれば、A列入力に対してB列に出力、D列入力に対してE列出力、G列に対してH列、、、

 という具合になります。

 Ifを使ってますけど、条件が複数の場合は Selest Case を使った方がシンプルですね。

 (ramrun)


『rumrunさん、200205110845についてさらに教えて下さい』(taiyo)

度々済みません。A1に「1」と入力した場合にB1には「S50」、

C1には「T50」という文字が現れるようにするにはどうしたらよいのでしょうか?


移動しました

(kazu)


 あ〜 K-1負けちゃったね。

 え〜と... あの... 今は1対1のプログラムなので簡単ですけど、

 1文字に2文字関連付けるのは大変ですよ。

 規則性があるならばいいのですが、なければすべての組み合わせを入力したテーブルを

 作らなければいけません。

 厳しいようですが質問の内容から察するに、VBAプログラムの基礎を理解していない

 ようですので、そこはもう少しご自分で努力してください(汗)。

 いちおう規則性があるとして、次の数字に登録されている文字をC列に表示されるように

 してみました。

    If .Column = 1 Then

        On Error Resume Next

        If .Value = "" Then

            .Offset(0, 1).ClearContents

            .Offset(0, 2).ClearContents

        ElseIf 0 < .Value And .Value < 161 Then

            .Offset(0, 1).Value = str(.Value)

            .Offset(0, 2).Value = str(.Value + 1)

        End If

    End If

 -----------------------------------------------------

 str(1) = "S50"

 str(2) = "T50"

 str(3) = "U50"

 と入れたとき、A1に1を入れるとB1にS50、C1にT50が出力。

 A2に2を入れるとB2にT50、C2にU50。

 という感じになります。


 Private Sub Worksheet_Change(ByVal Target As Excel.Range)

    Application.EnableEvents = False

    Dim str(1 To 160) As String

    Dim table(1 to 160, 1 to 2) as Integer 

    '出力文字登録

    str(1) = "S50"

    str(2) = "T50"

    str(3) = "U50"

    str(4) = "dmy004"

    str(5) = "dmy005"

    str(6) = "dmy006"

    str(7) = "dmy007"

    str(8) = "dmy008"

    str(9) = "dmy009"

    str(10) = "dmy010"

    str(11) = "dmy011"

    str(12) = "dmy012"

    str(13) = "dmy013"

    str(14) = "dmy014"

    str(15) = "dmy015"

    str(16) = "dmy016"

    str(17) = "dmy017"

    str(18) = "dmy018"

    str(19) = "dmy019"

    str(20) = "dmy020"

    str(30) = "dmy030"

    str(40) = "dmy040"

    str(50) = "dmy050"

    str(60) = "dmy060"

    str(70) = "dmy070"

    str(80) = "dmy080"

    str(90) = "dmy090"

    str(100) = "dmy100"

    str(110) = "dmy110"

    str(120) = "dmy120"

    str(130) = "dmy130"

    str(140) = "dmy140"

    str(150) = "dmy150"

    str(160) = "dmy160"

    'テーブル登録

    table(1, 1) = 1   'A列数値1のとき B列へ出力するstr No.

    table(1, 2) = 2   'A列数値1のとき C列へ出力するstr No.

    table(2, 1) = 1   'A列数値2のとき B列へ出力するstr No.

    table(2, 2) = 3   'A列数値2のとき C列へ出力するstr No.

    table(3, 1) = 2   'A列数値3のとき B列へ出力するstr No.

    table(3, 2) = 3   'A列数値3のとき C列へ出力するstr No.

    table(160, 1) = 150   'A列数値160のとき B列へ出力するstr No.

    table(160, 2) = 160   'A列数値160のとき C列へ出力するstr No.

    With Target

    If .Column = 1 Then

        On Error Resume Next

        If .Value = "" Then

            .Offset(0, 1).ClearContents

            .Offset(0, 2).ClearContents

        ElseIf 0 < .Value And .Value < 161 Then

            .Offset(0, 1).Value = str(table(.Value, 1))

            .Offset(0, 2).Value = str(table(.Value, 2))

        End If

    End If

    End With

    Application.EnableEvents = True

 End Sub

 -----------------------------------------------------

 テーブルを使った場合です。

 例ではA列に1を入力するとB列にS50、C列にT50。

 2ならS50、U50。

 3ならT50、U50。

 160ならdmy150、 dmy160を出力します。

 面倒だったのでtable(4, 1)から抜けてますけど、例にならって追加してください。

 (ramrun)


どうも有り難うございました。(taiyo)


コメント返信:

[ 一覧(最新更新順) ]


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