- ベストアンサー
こんなマクロって作れるんでしょうか?
質問させてください。 例えば、A1に○があればD1に数字の「1」を打つ A1に何もなければ何も打たない A2ならD2、みたいに縦にすべて適用させて 尚且つ、D1に×があればA1に○があっても D1に「1」を打たない。 それを縦に適用。 後、これはあればいいなってレベルなんですけど A1A2A3のどれかに○があれば D1に「1」を打つ。 この時、D2D3には絶対に×があります。 これは上に書いた奴の後に発動できればいいんですが… 個別に範囲指定作れればって思ってます。 こんなメンド臭いマクロって出来ますか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 #6の回答者です。 -------------------------------------- Sub TestCount() の取り付け方。 標準モジュールへ Alt + F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。 次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、以下のコードを貼り付けて、 Alt + Q で、画面を閉じます。 実行の仕方は、Alt + F8 で、「TestCount」をクリックします。 -------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) の取り付け方 シート・マクロ シートモジュール マクロを実行しようとするワークシートのシートタブ(下部のSheet1,Sheet2 ...)を右クリックすると、「コードの表示(V)」というメニューがありますから、それをクリックしてください。そして、開いた画面に、以下のコードを貼り付けて、Alt + Q で閉じれば設定は完了です。 実行の仕方は、 A列のどこかに、「○」入れてみます。 -------------------------------------- >勉強は本とか買うもんなんでしょうか? >ネットでなんとかなりそうな気もしてるんですが… 私は、それにお金を掛けただけ覚えるような気がします。(^.^) とはいえ、VBAの本はちょっと高いです。無駄遣いもしてしまいました。 私は、ネットでは覚えないように思います。理由は、ワークシート関数と違い、VBAは、積み上げ式ですから、一歩一歩段階を進めていかないと、うまくいかないです。単発のワザに積み上げはありません。 覚えるコツは、なるべく、Excelワークシートと切り離して、VBAの勉強を進めることです。なぜかというと、ワークシートというのは、複合的な要素が多くて、ややこしいからです。しかし、最初は、記録マクロで、どのようになるか、試してみることです。 最近、Google Video で、Excel VBA講座(英語)を見つけました。画面がぼけていて、細かいところがよく見えませんので、ほとんど早口でしゃべるのを追いかけるだけでした。VBAが分かる人には聞いていて分かるのですが、まったく知らない人には、さっぱりわからないです。 最後に、自分で覚えるよりも、質問を上手にして、回答者がスムーズに答えられるようにするのが、もっとも効率のよい利用法かもしれません。VBAを覚えるというのは、時間が掛かって効率が悪いです。それに、その技術は、特にExcelの場合は天井知らずです。その割に、Excel VBAの評価が低いのです。
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 #4の回答者です。 こんな感じですね。 '------------------------------------------- 単純に、D列に1を入れるマクロなら、以下のようなもので十分です。 '標準モジュール登録 Sub TestCount() Dim c As Range For Each c In Range("A1", Range("A65536").End(xlUp)) If Trim(c.Value) = "○" And _ Trim(c.Offset(, 3).Value) <> "×" Then c.Offset(, 3).Value = 1 End If Next c End Sub '-------------------------------------------- Trim を入れるのは、余計な空白があると、正しく認識しないからです。 以下のイベント・ドリブン型マクロは、少し奇妙な内容になっています。 A列の3行の間に、○がある、ということは、イベント・ドリブン型マクロには、貼り付けにしか存在していません。つまり、 A列 D列 ×がなければ、 (空白) .......1 ←1が入力される (空白) ○ '-------------------------------------------- 'イベント・ドリブン型マクロ 'シート・マクロ Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Variant Dim flg As Boolean If Target.Column <> 1 Then Exit Sub 'A列に入れなければ、何もしない Application.EnableEvents = False '○でなら、D列に1を入れる If Target.Count = 1 Then If Trim(Target.Value) = "○" And _ Trim(Target.Offset(, 3).Value) <> "×" Then Target.Offset(, 3).Value = 1 End If Else '3行の間で、○があったら、その先頭行のD列に、1を入れる For Each c In Target.Offset(1).Resize(2) If Trim(c.Value) = "○" Then 'その行に入れる 'c.Offset(, 3).Value = 1 '3行の一番上に○を入れる If Trim(c.Value) = "○" And _ Trim(Target.Cells(1).Offset(, 3).Value) <> "×" Then Target.Cells(1).Offset(, 3).Value = 1 Exit For End If End If Next c End If Application.EnableEvents = True End Sub
お礼
回答ありがとうございます。 こ、これは!? やっぱりWendy02さんの言うとおり 僕には早いみたいですね。 みなさんがなぜこれをマクロでやる必要があるのか 聞いてこられた訳が分かりました(笑 助言通りユーザーフォーム?から始めたいと思います。 まずこれからググります。 ちなみにこのマクロは上の部分の後に 下の部分を貼り付ければいいんですか? どんな風に動くか興味津々です。
- hallo-2007
- ベストアンサー率41% (888/2115)
こんなVBAは?といわれるかもしれませんが、 「ツール」「マクロ」「VBエディター」の標準モジュールに Sub Macro1() GYOU = 1 Do While Cells(GYOU, 1).Value <> "" If Cells(GYOU, 1).Value = "○" Then Cells(GYOU, 2).Value = 1 End If GYOU = GYOU + 1 Loop End Sub をコピィして、マクロを実行してみてください。 Cells(行番号、列番号) Do~Loopが繰り返しの処理 If~End が条件分岐 関数の説明で出てきたIf文を応用すれば、何とでも出来ると思います。 GYOUは、私が勝手に決めた変数で、コマンドではありません。 Do~Loopの中で、1つづつ加算されてきます。 何が行われているか、考えてみるとマクロとは何か、少し理解できるかもしれません。
お礼
回答ありがとうございます。 やっぱり良くわかりません(笑 勉強して出直します。 勉強は本とか買うもんなんでしょうか? ネットでなんとかなりそうな気もしてるんですが… ありがとうございます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 一部他の方とおっしゃっていることとダブりますが、 その内容は、本当にマクロで、どのように展開するか見えていますか? 論理が少し甘いようですから、たとえ、作ってあげても、「それは違う」という答えが返ってきそうな気がします。 少し、文章を書きなおしてみます。(言い換えると、マクロになる文章です) イベント型のマクロ(入力と同時に働くもの)だと考えると、 A列に、「○」を入れると、D列の同じ行に、「1」が入る。 D列に、「×」があれば、A列の同じ行に、「○」を入れても、上書きされないで、そのままになる。 D列が、「×」以外であれば、A列の同じ行に「○」が入れば、上書きされて、「1」が入る。 >A1A2A3のどれかに○があればD1に「1」を打つ。 >この時、D2D3には絶対に×があります。 プログラムとしては、意味が通りません。 A1に「○」が入れれば、D1 に1が入る。 A2に「○」が入れれば、D2 に1が入る。 A3に「○」が入れれば、D3 に1が入る。 しかし、そのD列の3行の中に、仮に、「×」があったとしても、それ自体に、影響はありません。 イベント型でないとするなら、あまり、意味がありませんね。単に、関数を利用してもできるような気がします。「×」は予め入っているということになるわけですから、 D列に、 =IF(A1="○",1,"") で済むわけです。 なお、イベント(・ドリブン)型のマクロは、中級レベルになります。ユーザーフォームなどをされてからのほうがよいです。
お礼
回答ありがとうございます。 この質問は興味だったんですが、 もしよろしければ、どんなコード使うんでしょうか? 教えていただけると幸いです。 ありがとうございました。
- hallo-2007
- ベストアンサー率41% (888/2115)
どうしてもマクロでなくてはならない理由があるのでしょうか。 一般機能の関数で >A1に○があればD1に数字の「1」を打つ >A1に何もなければ何も打たない とは、D1セルに =IF(A1="○",1,"") >A1A2A3のどれかに○があれば >D1に「1」を打つ。 =IF(OR(A1="○",A2="○",A3="○",1,"") 下フィルで、機能できます。 マクロで作っても面度臭くもないですが、なぜ、マクロなのかがわかりません。
お礼
回答ありがとうございます。 NO2の補足で書いた通り、興味での質問でした。 基本関数ばっかり使っているので マクロ使ってみたいなぁておもって… すいませんでした。
- imogasi
- ベストアンサー率27% (4737/17069)
>A1に○があればD1に数字の「1」を打つ、A1に何もなければ何も打たない。A2ならD2、みたいに縦にすべて適用させて・・ 関数でもできること。マクロでやりたいのですか。 >尚且つ、D1に×があればA1に○があっても、D1に「1」を打たない。(注) これは質問のミスタイプではないでしょうね。 D列は質問の作業を行う前の最初はどういう値が入っていますか。 >A1A2A3のどれかに○があれば、D1に「1」を打つ これも関数でもできます。 >D2D3には絶対に×があります。これは上に書いた奴の後に発動できればいいんですが ますますD列に元は何が入っているのか、良くわからない。 >上に書いた奴の後に発動できればいいんですが… 個別に範囲指定作れればって思ってます。 意味不明。 エクセルを少し経験したり、プログラムを組もうとする人の表現と違うように思う。 マクロの勉強がしたくなったのかな。 実例を挙げて1歩1歩説明したら同ですか。 〔注)関数では、D1の値を参照して、D1に関数式を入れられない。 それでマクロでやりたいというなら判るが。
お礼
補足に書いてしまいました… すいませんでした。
補足
回答ありがとうございます。 ぶっちゃけ言うと確かにこれ関数で作ったんですよ。 ただマクロはよくわからんので興味が沸いたってところです。 実例としては ○をつける「送るものがある」 1を打つ「カウント用」 Dに×がある「送り先が同じ場所(わけあって)」 1つにまとめて送付 つまり1つでも○があればカウントを1にしたい。 A列に「送る物一覧」のデータ見ながら○を打ち込んで その後送る物の数を数えるみたいな表なんです。 「上に書いた奴の~」のくだりは一気に出来ることなのか どうかが良く分かってない奴の戯言だとおもって流してください。 ただこれをボタンでも作って一気に○が付く ところ見てみたいなぁって… 分かりにくくてすいませんでした。
- uro_tan
- ベストアンサー率15% (6/40)
出来ます。 勉強して分からないところがあればまた質問して下さい。
お礼
ありがとうございます。 勉強します。 出来るとわかっただけで前進です。
お礼
回答ありがとうございます。 何から何までホンマありがとうございます。 まずうまく質問できる位になるまでは 勉強してみることにします。