• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのマクロについて)

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

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

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

  • ベストアンサー
  • 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 ではいけませんか?