エクセルで条件付きでセルの値を転記する方法

このQ&Aのポイント
  • エクセルで特定の条件に基づいてセルの値を別のセルに転記する方法を教えてください。セルに入力された値に応じて、指定の形式で別のセルに値を表示したいです。
  • また、セルに式を入力せずに実現する方法があれば教えてください。
  • 現在はマクロを使用して、セルの値を別のセルに転記していますが、さらにもう一つのマクロを追加することで、より効率的に処理を行いたいです。どのようなマクロを作成すれば良いでしょうか?
回答を見る
  • ベストアンサー

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

エクセルにおいて、 セルの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 がいいでしょうか? その場合、そのマクロの記述そのものを教えてください。  お願いします。

  • gx9wx
  • お礼率95% (440/460)

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答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 なら?

gx9wx
質問者

お礼

ありがとうございます。 すいません。 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 が 変化しません。 分かりません。すいません。

gx9wx
質問者

補足

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

その他の回答 (6)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.7

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

gx9wx
質問者

お礼

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

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.6

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

gx9wx
質問者

お礼

基幹システムの吐き出しデータは 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 となってしまいます。 マクロ以上にエクセル自体の理解が無く申し訳ないです。 いろいろありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

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

gx9wx
質問者

お礼

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

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答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

gx9wx
質問者

お礼

ありがとうございます。 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

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答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

gx9wx
質問者

お礼

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

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

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

gx9wx
質問者

お礼

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

関連する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 これでは何か発想の転換が必要に思えます。

  • 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

  • Excelでセルの値を変化させた時にマクロを実行するには?

    "A1"のセルに値を入れるとマクロが実行するように組んだのですが、問題が発生しました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("A1") Then      cells(1,2)=5      ・・・・ End If End Sub ここでA1に"5"を入力すると、B1に5と入力されるのですが、Target=5と認識してしまい、A1と同じ値になるので無限ループになってしまいます。 なにか回避策はないでしょうか? よろしくお願いします。

  • マクロの疑問

    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を選んでも全く移動しないのはなぜでしょうか。 なにか落とし穴がありそうで。。。 よろしくお願いします。

  • エクセルマクロ(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

  • セルの値をファイル名にするには

    現在下記のマクロを入力しています。 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$10" Then Target.Offset(-6, 2).Value = Date End If End Sub この時 ファイル名を SHEET1のA1 セルの値を利用してファイル名にするために下記の内容を入れてブックを保存したいと考えています。 上記のマクロが入っていないときは上手く行くのですが下記を追加するにはどうすればいいかご指導いただけませんでしょうか。 宜しく御願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 And Target.Column = 1 Then ActiveSheet.Name = Target.Value ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Target.Value End If End Sub

  • 数値が入力されたら別の2つのセルに式を書き込みたい

    よろしくお願いします エクセル2010のマクロで次のことをしたいのですが、私にはその知識がありません どなたか教えてください Private Sub Worksheet_Change(ByVal Target As Range)   B10に4桁(1000から9999)の数値が入力されたら   C10に以下の式を書き込みます 仮にB10の数値が3000なら =RSS|'3000.t'!更新済 とC10にマクロで書きます   同時にL10には =E10*D10 の式をマクロで書きます   もしもB10に入力されていた数値が削除されたら C10からL10のデータ(数値です)をすべて削除します(空白のセルにします) 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 としたらエラーが返ってきました。 理由を教えてください。 よろしくお願いします。

  • エクセルVBAでセル変化したら別のセルへコピーする

    おはようございます。VBAをはじめて浅い初心者です。 あるセルに数字および文字列が入力されたら違うセルへコピーしたいのですがどのようにすればできますか。 Private Sub Worksheet_Change(ByVal Target As Range)とか 使用してつくればいいのですか?教えてください。

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

    マクロで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 どなたかご存じの方教えて下さい

専門家に質問してみよう