エクセルのマクロで入力値を表示する方法

このQ&Aのポイント
  • エクセルのマクロを使用して、入力シートの特定のセルの値を別のシートのセルに表示する方法について教えてください。
  • また、マクロが正常に動作しない場合や、表示位置を変更する方法についても教えてください。
  • 具体的な解決策をお待ちしております。
回答を見る
  • ベストアンサー

エクセルのマクロについて

QNo.3421130で質問させて頂いた件の続きなのですが 入力シート(1)のA1に入力された値を、シート2のB1に表示(つまりB列の同じ行数のセルに表示)するというマクロをお教え頂き、早速実践してみましたが、入力シートA1に入っている値が入力シートA10から算出された値(例:A11に日付の2007/10/18と入っていて、A10にはMONTH関数で10だけを抽出している。そのA10の値10をA1が参照している状態やIF関数で反映された値等)がシート2に表示されません。 また本マクロは入力シート(1)とシート2の同じ行列のセルの表示しか出来ませんが、たとえば入力シート(1)のA2セルの値をシート2のB4に表示(任意で表示位置を変更する方法、シート2の反映セルを下へずらす等)が分りません。 以下、お教え頂いたマクロです。 Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = 1 Then    Sheets("Sheet2").Cells(Target.Row, "B").Value = Target.Value  End If End Sub 続きの質問であることと、説明が分りにくく大変申し訳ありません。 非常に困っております。よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >度重なる追加機能と、素人のマクロの記録の多様により、ファイルサイズが10Mを超えてしまい、もの凄く重いのです。 ひとつだけいえるのは、シートはできる限り、分散させたほうがよいです。同じ10Mでも、一気に、メモリを増やすようなことは避ければ、問題は少ないようです。 後は、セルの領域などが点在している場合は、一旦、名前-定義で登録するという方法があります。セルに数式を入れるというのは、メモリの使用からみると、それは文字列に扱うそうです。そうすると、文字列が少ないほうが良いという、理屈が成り立つわけです。ちょっと意外ですね。 なかなか、マクロでというのも大変なのは認めます。ただ、どうしても、マクロが避けられないものが、配列数式を使うものでした。私の場合は、具体的な関数でいうと、Mode と Frequency 関数があります。統計では良く使うわりには、思うようにならないのです。 >(1)マクロでIF関数と同じことをする方法(例:シート1のA1に1と入れば○、1以外だと×が表示される等) 最初、同じChange イベントになってしまいますが、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 1 Then Exit Sub 'A列以外は除外 If Target.Count > 1 Then Exit Sub '複数のセル選択は除外 If VarType(Target.Value) <> vbDouble Then Exit Sub '数字以外は除外 On Error Resume Next Application.EnableEvents = False If Target.Value = 1 Then   Target.Value = "○" Else   Target.Value = "×" End If Application.EnableEvents = True End Sub >(2)マクロでフリガナを自動的に表示する方法 (PHONETIC関数と同じもの) これは、特殊な内容のマクロです。テキストをセルに貼り付けた場合に、Phonetic 関数で出てこないものでも、よみがなを出すことが可能です。マウスで範囲選択して変換してください。漢字が入っていないものに対しては、よみがなを出しません。ひらがなを含める場合は、とすると、出てきます。ただし、JISの漢字の中で、10数個、よみがながないものがあったような気がします。その場合は、出てきません。 c.Value Like "*[ぁ-龝]*" Const I As Integer = 1 '右へ で、右に何個分空けるか決めてください。 Sub ReplacePhoneticFunc()   'Phonetic関数の代わり   Dim c As Range   Dim ret As Variant   Dim j As Integer   '設定   Const I As Integer = 1 '右へ   Const K As Boolean = True 'True: ひらがな, False: カタカナ   Const H As Boolean = False 'True: 半角, False: 全角   If K Then     j = vbHiragana '32   Else     j = vbKatakana + IIf(H, vbNarrow, vbWide) '16   End If      If StrComp(TypeName(Selection), "Range", 1) <> 0 Then Exit Sub   For Each c In Selection     '漢字があるか判定     If c.Value Like "*[一-龝]*" Then       'Phonetic関数で取れない時       If c.Characters.PhoneticCharacters = "" Then         c.SetPhonetic       End If       ret = Application.GetPhonetic(c.Value)       If ret <> "" Then         c.Offset(, I).Value = StrConv(ret, j)       End If     End If   Next c End Sub

yu-ka86
質問者

お礼

お礼がおそくなり、申し訳ありませんでした。 (体調不良でずっと動けませんでした) 大変丁寧に教えて頂き、心より感謝致します。 本当にありがとうございました。 私が提供できるポイントすべてつけさせて頂きたい位なのですが、同一の方には付与できないとエラーが出てしまい・・・。残念です。 頑張ります。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

#2の補足 ActiveSheet.Next. と書きましたが、隣のシートという意味ですから、 明示的に入れる場合は、 Worksheets("Sheet2"). に入れ替えてください。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 ご質問の内容が、あまりマクロ型に向かない内容です。 >たとえば入力シート(1)のA2セルの値をシート2のB4に表示(任意で表示位置を変更する方法、シート2の反映セルを下へずらす等)が分りません。 私は、マクロを得意とする方ですが、こういうことにマクロを一度も考えたことがありませんね。作業シートにするとか、ドラッグして、次のページに渡すとか、いくつか方法はあるように思います。 前回の質問から。 >セルに関数を入れる方法だとファイルサイズが大きくなりすぎてしまいます。 もし、ファイルサイズが大きくなる場合は、以下のようなマクロではなく、完全に、数値を置く形にしなければならないです。ファイルサイズが大きくなる問題よりも、ファイルを開いて、値を再取得し再計算させるような数式、いわゆる「揮発性関数(式)」を置くこと自体が問題なのです。 '----------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Const MYROW As Integer = 2 'ずらす方向下へ Const MYCOL As Integer = 1 'ずらす方向右へ  On Error Resume Next  If Target.Column = 1 Then    For Each c In Target.Cells     ActiveSheet.Next.Cells(c.Row, c.Column). _     Offset(MYROW, MYCOL).Formula = c.Formula    Next c  End If  On Error GoTo 0 End Sub

yu-ka86
質問者

補足

回答ありがとうございます。 すいません。いろいろご指摘頂き・・・。 私は関数はそこそこ得意ですが、マクロは記録程度しか出来ず、困っています。勉強はしてみましたが、質問の事は何度やってもうまくいきませんでした。 ちなみに今作成中のファイルは別の方が作った業務用共有ファイルで、その方も独学の為関数(特にIFを多用)中心で作成しております。 度重なる追加機能と、素人のマクロの記録の多様により、ファイルサイズが10Mを超えてしまい、もの凄く重いのです。 ワークシートは10シート程あります。ワークシート1は入力フォーム、そのほかは入力フォームから採取したデータを利用して新たな表作成もしくは集計に使っています。 マクロのスリム化、新規ブックへコピー等をやりましたが一向にファイルサイズが減らず、最終行き着いた自分なりの答えはセルに関数があまりにもたくさん入っているから重いので、計算自体をマクロで処理するという結論に至りました。 確かにWendy02様のおっしゃる通り、揮発性関数(式)を置くことが問題です。関数をマクロで処理して、何度も再計算する方が問題ですが、当方のマクロに対する知識不足と極力今のファイルの入力データ部分をいじらず、マクロで計算式をリンク出来ればと安易に考えていました。 すいません。以上が知りたかった理由です。 補足で大変申し訳ないのですが、 (1)マクロでIF関数と同じことをする方法(例:シート1のA1に1と入れば○、1以外だと×が表示される等) (2)マクロでフリガナを自動的に表示する方法 (PHONETIC関数と同じもの) がわかれば業務ファイルをすべて数式ではなく、ほぼマクロで作成出来そうです。本当に何度も何度も厚かましくて申し訳ありません。 本当に困っていますので・・・。すいません。 よろしくお願いします。

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

んー・・・作成依頼でしょうか。 マクロの勉強をしているのであれば、自分なりの方法をあげてみてください。 それに対してアドバイスがもらえると思います。 前の質問を見ていないので意図が分かりませんが、 シート2のセルに  =Sheet1!A1 ではいけませんか?

関連するQ&A

  • エクセル マクロについて

    エクセルでネットの情報(為替の値動き)を自動更新で取得しています。自動更新前の情報を同一シート(同一シートが無理な場合は別シートでもいいのですが…)にコピペし一覧にするマクロはありますか? Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then         'A1のセルの値が変化したら・・・ n = Cells(Rows.Count, "B").End(xlUp).Row + 1  ’B列の最終行を探しその次の行に・・・ Range("B" & n).Value = Range("A1").Value    ’A1の値を貼り付けていく End If End Sub これだと手動セルを上書きした時しか動いてくれませんでした。検索もしたのですが見当たらなくて困っています。お力を貸してください。

  • マクロでの条件判断について

    A行に何かデータを入力した場合、同じ列のとなりの行のセルに入力時間を残したいと思い、 例 A1:あ B1:2006/5/9/16:00 A2:い B2:2006/5/10/18:00 以下のマクロを教えて頂いたのですが、 Private Sub Worksheet_Change(ByVal Target As Range) '///A列のセル以外ならマクロ終了/// If Target.Column <> 1 Then Exit Sub '///1行目のセルならマクロ終了/// If Target.Row = 1 Then Exit Sub '///内容がブランクならB列のセルをブランクにする。/// If Target.Value = "" Then Target.Offset(0, 1).Value = "" Else Target.Offset(0, 1).Value = Format(Date + Time, "yyyy/mm/dd hh:mm:ss") End If End Sub A列以外にもC列に入力した値の入力時間をD列にE列に入力した値の入力時間をF列にと、全部で6箇所値を入力したとなりのセルに入力時間が出るようにしたかったのですが、 '///A列のセル以外ならマクロ終了/// If Target.Column <> 1 Then Exit Sub の部分を '///A,C列のセル以外ならマクロ終了/// If Target.Column <> 1 Or Target.Column <> 3 Then Exit Sub のように変更してまずはA列とC列に値を入れて挑戦したのですが、時間が表示されなくこまっておりました。 解決方法をご存知のかたがいらっしゃいましたら、ぜひよろしくお願いいたします。

  • エクセルでセルに文字が入力されたらマクロを実行

    前回どなたかが質問されて回答を見せてもらったら私のやりたいことと同じだったので実行してみましたが出来なかったのでもう一度質問をさせてください。 1.実行したのですが、なにも実行されません。 2.実行したらメッセジBOXだけは実行するのですが、後のコマンドが実行されずにエラーになります。 もう一度詳しく教えてください。 マクロ初心者ですよろしくお願いします。 1.【シートモジュールで条件判定し、マクロを起動する】 通常はこちらの方法が使われます。 Private Sub Worksheet_Change(ByVal Target As Range)   '変化のあったセルがA1セルか?   If Target.Address = "$A$1" Then      '条件判定:A1セルの値は 1 か?     If Target.Value = 1 Then       MsgBox "A1セルは条件を満たしました"     End If   End If End Sub 2.【ワークシート上で条件判定し、マクロを起動する】 処理内容にもよっては不向きな場合もありますが、こんな方法も あります。 マクロを Sub ではなく、Function 、、つまり関数にしてしまいます。 Function TestMacro() '<-- Sub を Function に替える   MsgBox "A1セルは条件を満たしました"   TestMacro = "" '戻り値はなし End Function そして、ワークシートの B1 セルに次の式を入力します。()は必須 です。  =IF(A1=1,TestMacro(),"")

  • マクロが動きません

    以下のようなプログラムでC3の値が変わるたびにA10の値に1を加えていきG3,H3が両方0になったらA10の値も0にする。C5の値が変わるたびにA15の値に1を加えJ3,K3が共に0になったらC5も0にするようにしました。 しかし、動作しません。 このシートの3行目は=シート名!セル番号 という形でほかのシートのセルの値が表示されるようになっています。G3、H3、J3、K3に手動で数値を入力した場合 は動作します。 ほかのシートのセルの値を表示させたセルの値が変化しても動作させる方法はないでしょうか> Private Sub worksheet_change(ByVal target As Range) With target If .Count > 1 Then Exit Sub If IsNumeric(.Value) = False Then Exit Sub If IsEmpty(.Value) = True Then Exit Sub If Not .Row = 3 Then Exit Sub Select Case .Column Case 3 Range("A10").Value = Range("A10").Value + 1 Case 5 Range("A15").Value = Range("A15").Value + 1 End Select End With If Range("g3").Value = 0 And Rang("h3").Value = 0 Then Range("A10").Value = 0 If Range("j3").Value = 0 And Rang("k3").Value = 0 Then Range("A15").Value = 0 End Sub

  • エクセルのマクロコードに付いて教えて下さい。

    下記のマクロコードがありますが、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With End Sub セル位置の指定を変更する場合は、どの様に 書けば良いのですか? このコードですと、セルA1の入力指定でなっていますが A1~A5までとか。A1、B1,C1とかにする場合はどの様に 書けば良いか教えて下さい。 マクロに付いて、殆ど知識が無いものですので 出来れば、分かり易い説明でお願いします。 宜しくお願いします。

  • 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と同じ値になるので無限ループになってしまいます。 なにか回避策はないでしょうか? よろしくお願いします。

  • エクセルVBAのDeleteキーによるエラー

    VBA初心者です。エクセル(2003)のVBAについて質問です。 セルに何か値が入力されたら、隣のセルに「TRUE」と入力し、 入力が消去されたら、隣のセルに「FALSE]と入力されるマクロを作成しています。 下記のコードをシートモジュールに入力し、 標準モジュールにはそれぞれ呼び出し用のマクロを入力しています。 A列とB列は結合されていて、その結合されたA・B列のセルに値が入力されたり消去されたりすると 隣のC列に結果が入力されるようにしたいのですが、 A・B列の値をDeleteキーで消去するとエラーになってしまいます。 BSキーで値を消去するとエラーは出ません。 Deleteキーでもエラーが出ない様にする方法はありますでしょうか。 どなたかご教授お願いします。 ----------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1:B1,A3:B3,A5:B5")) Is Nothing Then If Target.Value <> "" Then Select Case Target.Address(0, 0) Case "A1" Call マクロ1_TRUE Case "A3" Call マクロ3_TRUE Case "A5" Call マクロ5_TRUE End Select ElseIf Target.Value = "" Then Select Case Target.Address(0, 0) Case "A1" Call マクロ1_FALSE Case "A3" Call マクロ3_FALSE Case "A5" Call マクロ5_FALSE End Select End If End If End Sub

  • Excelのマクロで質問です

    セルに関数で文字が入った時にマクロを実行させる方法を教えて下さい。 今回行いたいのは、C9~C19セルにNGと表示された場合にメッセ―ジを表示したいです。 Private Sub Worksheet_Change(ByVal Target As Range) '変化のあったセルがA1セルか? If Intersect(Target, Range("C9:C19")) Is Nothing Then Exit Sub '条件判定:A1セルの値は 1 か? If Target.Value = "NG" Then MsgBox "NGです" End If End Sub このような場合C9~C19セルにNGと打ち込めばメッセ―ジが表示されるのですが あらかじめ、関数で =IF(M9="","",IF(Q9<M9,"OK","NG")) というような式がそれぞれのC9、C10、C11・・・・セルに入ってしまっています。 これだと、例えばC9セルにNGと表示されてもマクロは起動せず、メッセージが表示されません。 関数をマクロに盛り込むか、このままでもマクロが起動できるような書き方があるか 教えてください。 すみません。補足でQ9セルには =IF(I9="","",I9+"07:01")のような関数が 入力されています。

  • エクセル マクロで教えて下さい。

    入力されたセルの値で、フリーフォーム(図形)の色を変えるマクロを作成しました。 (色々の方のお力をお借りしておりますが。。。) Private Sub Worksheet_Change(ByVal Target As Range) Dim mShp As String, SCol As Integer Select Case Target(1).Address(0, 0) Case "A1": myShp = "フリーフォーム 1" Case "A8": myShp = "フリーフォーム 8" Case "B3": myShp = "フリーフォーム 3" Case Else: Exit Sub End Select Select Case Target(1).Value Case 1: SCol = 10 Case 2: SCol = 13 Case 3: SCol = 12 Case 4: SCol = 11 Case 5: SCol = 15 Case Else: SCol = -1 End Select With Me.Shapes(myShp).Fill If SCol = -1 Then .Visible = msoFalse Else .Visible = msoTrue .ForeColor.SchemeColor = SCol End If End With End Sub A1,A8,B3に直接値を入力すると色が変化しますので、問題ないのですが、VLOOKUP等で別シートの値を、A1,A8、B3に表示させても色が変わらない事がわかりました。 そこで、このマクロでVLOOKUP等で引っ張って来た場合でも対応出来る様に変更する事は可能でしょうか? それが出来ない場合は、別シートのセルを直接参照し色を変化出来る様に変更する事が出来ないでしょうか? これを作成するのに聞いた人間はマクロに詳しい方々ですが、当方は、マクロは素人同然です。 詳しく説明していただければ幸いです。 何卒よろしくお願い致します。

  • エクセルでマクロを使って新規シートを作成する方法を教えてください!(条件あります)

    初めて質問するのですが、エクセルで原紙シートのマクロまで全てをコピーして新規のシートを作成させるにはどうしたらいいですか? 新規のシートの特定のセルに入力した時に新規シートが作成されるようにできますか? 原紙は Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Target.Address = "$A$1" Then ActiveSheet.Name = Target.Value End If End Sub のマクロが現在できあがってます。これを残しつつできますか?よろしくお願いします!

専門家に質問してみよう