• ベストアンサー
  • 困ってます

セルに入力された値を別セルに条件付で転記したい

エクセルにおいて、 セルのA1に 1 と入力したら セルA2に 半角で Q00000001と表示 セルのA1に 10 と入力したら セルA2に 半角で Q00000010と表示 セルのA1に 100 と入力したら セルA2に 半角で Q00000100と表示させたいです。 先頭は必ずQで計9桁でセルA1の入力値がみたない場合0で埋める。 これを行う一番いい方法は何がありますでしょうか? できたらセルには式は入れたくないです。 そのエクセルには Private Sub Worksheet_SelectionChange(ByVal Target As Range) Call ●● End Sub  が入っています。 シート保護をかけて セルA1とB1しか入力できないようになっています。 今はセルB1に入力するとマクロ●●が走って セルB2にマクロのSelect Caseで変換された値が転記されるようになっています。 もうひとつマクロを作って Private Sub Worksheet_SelectionChange(ByVal Target As Range) Call ●● Call ●●2 End Sub がいいでしょうか? その場合、そのマクロの記述そのものを教えてください。  お願いします。

共感・応援の気持ちを伝えよう!

  • 回答数7
  • 閲覧数520
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.4

Private Sub Worksheet_Change(ByVal Target As Range)   If Intersect(Target, Range("I9:I10")) Is Nothing Then Exit Sub   On Error GoTo line   Application.EnableEvents = False   Select Case Target.Address(0, 0)   Case "I9"     Target.Offset(, 1).Resize(, 5).Value = Sheets("Sheet2").Range("B1").Offset(Target.Value).Resize(, 5).Value     Call ハイフン挿入0M   Case "I10"     Application.EnableEvents = False     Range("D15").Value = "Q" & Format(Target.Value, "00000000")   End Select line:   Application.EnableEvents = True End Sub なら?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 すいません。 I9に 10と入力したら Sheet2の B11→Sheet1のJ9 C11→Sheet1のK9 D11→Sheet1のL9 E11→Sheet1のM9 F11→Sheet1のN9 に転記がされ、 Call ハイフン挿入0Mが走る。 I10に 50と入力したら D15に Q00000050と転記される。 予定なのですが I9に入力してもJ9~N9は変化せず Callマクロも走らず。 またさっきは 動いていた I10に50と入力しても D15 が 変化しません。 分かりません。すいません。

質問者からの補足

申し訳ありません。 動きました。 ただSheet2の B11→Sheet1のJ9 ここが数字14桁の場合 7.04871E+13と表示されます。 セルの値は正常です。 これはSheet1のJ9 のセルの書式設定を文字列にしておくしかないでしょうか?

関連するQ&A

  • 「Excelのセルへの入力内容の転記と元の内容への復帰」

    「Excelのセルへの入力内容の転記と元の内容への復帰」 何故それが必要かは別にして、次のようなことがしたい。 ・あるセル(例えばA1)にはある関数(式)が設定されている。 ・いま、セルA1にある値が入力されたとき、 ・その値を別のセル(例えばB1)へ転記(保存)し、 ・セルA1には元の関数に戻す。 これを、VBAで実現するにはどうすれば良いのでしょうか?。お教えください。 changeやselectionchangeイベントなどを使用すると出来そうですが、単純なコーディングではchangeの無限ネスト(無限再帰)となってしまいます。 例えば、次のようなコーディング:セルC1をA1セル選択時の関数保存場所として補助的に使用している。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "A1" Then Range("B1") = Range("A1") Range("A1").Formula = Range("C1").Formula End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A1" Then Range("C1").Formula = Range("A1").Formula End If End Sub これでは何か発想の転換が必要に思えます。

  • エクセルvba  (ByVal Target As Range)について

    シートのイベントプロシージャーが Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub となりますが (ByVal Target As Range)部分は何なのでしょうか? 何のためにあるのかわかりません。 Private Sub Worksheet_SelectionChange() End Sub としたらエラーが返ってきました。 理由を教えてください。 よろしくお願いします。

  • マクロの疑問

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address <> "A2" Then Range("A2").Select End If End Sub とすると、どのセルを選んでもA2に飛ぶのに、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A3" Then Range("A2").Select End If End Sub とすると、A3を選んでも全く移動しないのはなぜでしょうか。 なにか落とし穴がありそうで。。。 よろしくお願いします。

その他の回答 (6)

  • 回答No.7

>「数値が文字列として保存されています」 > となっています。 >(先頭に ' は入っていません) > そのセルの値をマクロとかで別セルに転記すると > 転記先では1.23457E+13 > と表示されてしまいます。 > この件はずっともやもやしています なるほど、そういう意味ですか。 これはわたしも経験があります。 でもなぜそうなるのかはわたしも知りません。 体験からするとエクセル以外のデータベースからインポートされた数字のデータはセルの書式が標準でも文字列となるようです。 ところがこれを転記すると、今度はエクセルのおせっかい機能が働いて、数字は数値に変換され、先頭の0は消えるし、桁数が多いと指数表示になってしまいますね、 わたしもなぜセルの書式が標準なのに中の数字が文字列でいられるのか疑問に思ってました。 この件、別途質問されたらいかがでしょう? 詳しい方から回答があるかも。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

merlionXXさんも経験があるんですね。 別スレッドを立ち上げてみます。 いろいろとありがとうございました。

  • 回答No.6

> ここが数字14桁の場合 > 7.04871E+13と表示されます。 それはマクロに限った話ではないでしょう? セルの書式が、[標準] 形式では、12 桁以上の数値に対して指数表示になります。 指数表現が使用されないようにするには、[数値] などの別の表示形式を適用する必要があります。 http://121ware.com/qasearch/1007/app/servlet/qadoc?QID=002938

共感・感謝の気持ちを伝えよう!

質問者からのお礼

基幹システムの吐き出しデータは Microsoft Excel 2.1ワークシートで 全てのセルの書式設定は「標準」です。 で例えば 12345678901234 は 12345678901234 と表示されていて 「数値が文字列として保存されています」 となっています。 (先頭に ' は入っていません) そのセルの値をマクロとかで別セルに転記すると 転記先では1.23457E+13 と表示されてしまいます。 この件はずっともやもやしています。 セルの書式設定で同じ標準なのに 片方は 12345678901234と表示され 片方は 1.23457E+13と表示されます。 まっさらなエクセルに自分で入力すると ・セルの書式設定が標準だと 12345678901234 ↓ 1.23457E+13になります。 ・セルの書式設定が数値だと 12345678901234 ↓ 12345678901234 ・セルの書式設定が文字列だと 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) なのに、基幹システムの吐き出しデータは セルの書式設定が標準なのに 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) となっているので???。 手入力では書式設定が標準の状態で 12345678901234 と表示させるには先頭に'をつけるしか知りませんが 'が無いのに表示されています。 でこれをマクロで転記すると 1.23457E+13 となります。 とりあえず、転記先のセルの書式設定を 数値、文字列、とかに変更して転記するようにしていますが いまいちすっきりしていません。 別スレでの行削除でもそうなのですが、 行削除するデータは基幹システムの吐き出しデータそのままなので セルの書式設定は全て標準で数値のみの場所は同じく 12345678901234(ただし 数値が文字列と保存されています と注釈有) と表示されています。 配列に取り込んで書き出しても 12345678901234(ただし 数値が文字列と保存されています と注釈有) と保っています。 なのにセルから別セルへ転記すると 1.23457E+13 となってしまいます。 マクロ以上にエクセル自体の理解が無く申し訳ないです。 いろいろありがとうございました。

  • 回答No.5

> またさっきは動いていたI10に50と入力してもD15 が 変化しません。 マクロエラーが発生しませんでしたか? とりあえず、このマクロをコピペして実行してみてください。 Sub イベント復旧()   Application.EnableEvents = True End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

すいません。 マクロエラーは出ませんでした。 また正常に動作しています。 シート保護が悪さをしました。 申し訳ありません。 どうもありがとうございました。

  • 回答No.3

merlionXXです。 ANo2のコードは使っちゃいけません。とんでもないミスがありました。 以下訂正です。 Private Sub Worksheet_Change(ByVal Target As Range)   If Intersect(Target, Range("A1:B1")) Is Nothing Then Exit Sub   On Error GoTo line   Application.EnableEvents = False   If Target.Address(0, 0) = "B1" Then ' Call ●●   Else     Range("A2").Value = "Q" & Format(Target.Value, "00000000")   End If line:   Application.EnableEvents = True End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 Private Sub Worksheet_Change(ByVal Target As Range) に変更だとするとちょっと構想が変わってしまいました。 最初から纏めて質問すべきでした。m(__)m 実際には I10に数値を入力すると D15がQ頭の9桁に変換されて転記。 でJ9の値が変わったら Call ハイフン挿入0M を走らせるつもりでした。 Q頭の9桁の方は変換はできましたが、 今Call ハイフン挿入0M が走りません。 もっと言いますと I9に数字を手入力したら マスターデータとなるシート2から該当部分を J9,K9,L9,M9,N9に転記をし、 そうしたら Call ハイフン挿入0M  を走らせたいのです。 (こちらは今質問中(^_^.) ------------------ Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("I10:J9")) Is Nothing Then Exit Sub On Error GoTo line Application.EnableEvents = False If Target.Address(0, 0) = "J9" Then Call ハイフン挿入0M Else Range("D15").Value = "Q" & Format(Target.Value, "00000000") End If line: Application.EnableEvents = True End Sub -------------------- Sub ハイフン挿入0M() n = Range("J9") If Len(n) = 14 Then Select Case True Case Left(n, 2) = "9X" And InStr(n, "-") = 0 myStr = Left(n, 3) & "-" & Mid(n, 4) Case Mid(n, 9, 1) = "-" myStr = Left(n, 3) & "-" & Mid(n, 4, 11) Case Left(n, 1) = "9" And InStr(n, "-") = 0 myStr = Left(n, 5) & "-" & Mid(n, 6, 5) & "-" & Mid(n, 11, 2) & "-" & Mid(n, 13, 2) Case InStr(n, "-") = 0 myStr = Left(n, 3) & "-" & Mid(n, 4, 5) & "-" & Mid(n, 9, 2) & "-" & Mid(n, 11, 2) & "-" & Mid(n, 13, 2) Case Else myStr = n End Select Else myStr = n End If Range("J10").Value = myStr End Sub

  • 回答No.2

merlionXXです。 入力にあわせて自動実行ならWorksheet_Changeを使うべきです。 Worksheet_SelectionChangeはセルを選択しただけで作動してしまいます。 入力セルによる分岐も出来ます。 以下は、A1に入力すればご質問のマクロを、 B1なら●●を呼び出します。 それ以外のセルの場合は何もおきません。 Private Sub Worksheet_Change(ByVal Target As Range)   If Intersect(Target, Range("A1:B1")) Is Nothing Then Exit Sub   On Error GoTo line   Application.EnableEvents = False   If Target.Address(0, 0) = "B1" Then ' Call ●●   Else     Range("A2").Value = "Q" & Format(Target.Value, "00000000")   End If line:   Application.EnableEvents = False End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

いつもすいません。 すでに次の回答があり これは使用しないようにとの事ですので スルーします。 ありがとうございました。

  • 回答No.1
  • KURUMITO
  • ベストアンサー率42% (1835/4283)

式を使わないでA1のデータをA2に表示させるためにはマクロを組むことになるでしょう。 単にA1セルに1や10を入力してお示しの表示にするだけでしたらA1セルを右クリックして「セルの書式設定」から「表示形式」の「ユーザー定義」で Q0000000# と入力すればよいでしょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

>A1セルを右クリックして「セルの書式設定」から「表示形式」の >「ユーザー定義」で Q0000000# この場合、セルには例えばQ00000050と表示されているのですが 実際のセルの値は50でした。 このセルの値をべつで使う為 セルの値も表示もQ00000050でないと まずいのです。 申し訳ありませんでした。 >マクロを組むことになるでしょう。 それが出来なくて困っています。 ありがとうございました。  

関連するQ&A

  • エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?

    VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- End Sub

  • A1に数字を入力するとB1に加工して転記するマクロ

    A1に入力されるのを監視して、入力された数字を加工してB1に自動的に転記するマクロを書きたいのですが、どのようにすればよいでしょうか? 他の質問(http://okwave.jp/qa/q3163895.html)から、こんな感じかなと思うのですが、【B1に下一桁を切り落として、転記】の部分をどう書いていいのか分かりません。 例えば、A1に「12345」と入力された場合、B1は「1234」を入力したいのです。 よろしくご指導ください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) if Range("A1") <>"" then 【B1に下一桁を切り落として、転記】 End Sub

  • エクセル マクロを利用して繰り返して入力する方法

    マクロでA1B1C1D1E1F1セルに入力しF1入力後A2B2C2D2E2F2と 下方向へ繰り返し800行くらいまで入力し、それとB列はスキップしたいのですが下記の方法で別々のシートでは うまくいくのですが同じシ-ト内ではエラ-になってしまいます 次の行への移動 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 7 Then Cells(Target.Row + 1, 1).Select End If End Sub B列のスキップ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("G1") <> "" Then If Target.Column = 2 Then Target.Offset(0, 1).Select End If End If End Sub どなたかご存じの方教えて下さい

  • 複数のセルを選択しているかを取得するプロパティは?

    SelectionChangeイベントで 複数のセルを選択しているかを取得するプロパティってないのでしょうか? 今は、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Len(Target.Address) > 5 Then MsgBox "複数のセルが選択されています" End If End Sub こうしていますが、行数が多くなると文字も多くなってしまうので、このコードでは対応できません。 Rangeオブジェクトに何個セルが入ってるかを知る方法はありますか? ウォッチのTargetのcellsを見ても、どう見ればいいのかわかりません

  • カーソルを動かしたときは発動させたくありません

    エクセルの Worksheet_SelectionChangeイベントで --------------------------------------------------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then MsgBox "$A$1です" End If End Sub --------------------------------------------------------- のコードを標準モジュールに書いて、A1セルをクリックすると、MsgBoxが表示させますが、 B1セルから、キーボードの「→」キーを押してA1に移動してもMsgboxが表示されてしまいます。 クリックした時はマクロを発動させたいのですが、カーソルを動かしたときは発動させたくありません。 そんな事は可能でしょうか?

  • エクセルで指定したセルへカーソルを移動させる

    エクセル2007で セル”I1”に文字を入力してエンターを押したら、“B11”へセルを移動させたく、 以下のように作ってみたのですが、 反応してくれません。 このVBAもインターネット上にあったものを参考にしただけなので、 何が悪いのかさっぱりわかりません。どこを修正したらよいのか教えてください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Select Case Target.Address(0, 0) Case "i2" [b11].Select End Select End Sub

  • マクロについて

    マクロ初心者です。 エクセルのマクロで下記は何を示しているのでしょうか。 困っているのでもなんでもないのですが、周りにマクロが判る人がまったく居ないので質問させてもらいます。 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) End Sub

  • エクセルVBA/イベント発生でコピペ不能はなぜ?

    シートに以下のマクロを設定すると、そのシート内ではコピーしたもののペーストが不能になります。 どうしてでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Interior.ColorIndex = 6 End Sub

  • Excel VBA 他のシートに演算結果を入れたい

    例えば、A&#65374;Dというシートのいずれかのo1セルに数値を入力すると、演算結果がp1に入る場合。 A&#65374;Dのどのシートでもo1に入力したら、Z!p1にp1の値を放り込みたいのです。 で、以下のようなコードを書いたのですが、上手くいきません。 因みに、セルの移動方向はオプションで「右方向」に設定してあります。 ※結果としてセルの移動を認識していないのか、まったく無反応です。 ※Range("Z!$P$1") =… の行にブレークポイントを設定しても、引っかかりません。 何が悪いのかお教え頂ければ幸甚です。 >違うシートには代入できない… ってことでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$P$1" Then Range("Z!$P$1") = Range("$P$1") End If End Sub ※なお、出典元のSubは以下の様なもので、正常に動作していました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then Range("B1") = Range("B1")+1 End If End Sub

  • シートのイベント VBA

    シートをクリックしたらシートをクリアしたいのですが クリックするセルがA1の場合は、マクロを実行させたくないのですが 下記のコードだとエラーになってしまいます。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Target.Range = Range("a1") Then Cells.Clear End If End Sub ”Range("a1")でなければ、Cells.Clearする” にはどうすればいいですか?