- ベストアンサー
エクセルのAcyiveXコマンドボタンの使い方について質問です。
Wendy02の回答
- Wendy02
- ベストアンサー率57% (3570/6232)
#1の補足の内容は、レイアウト的に、分からないわけではないのですが、最初の質問から、レイアウトを図で入れるなり、それなりに分かりやすくしてください。マクロは、必ずセルの位置情報が必要です。お話の内容では、また、100% VlookUpではできませんが、マクロ自体も、ほとんどご存知ないような気がします。 以下は、ボタンを左クリックすることで、情報を引き出し、右クリックすることで、書き換えするという方法にしました。つまり、数式のVlookupは、利用しませんから、もしマクロを使えば、数式は消されてしまいます。もともと、この要件では、数式のVlookupの利用は無理です。 シート名そのものは、Sheet2, Sheet3, Sheet4 と変更はしません。単に、呼び名だけにしています。 氏名は、全文一致ではなく、部分一致でも検索します。 '//コントロールツールのボタン Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If Button = 1 Then '左クリック Call FindLookup(Range("A1").Value, Range("B2").Value, False) ElseIf Button = 2 Then '右クリック Call FindLookup(Range("A1").Value, Range("B2").Value, True) End If End Sub Function FindLookup(ByVal sText1 As String, ByVal sText2 As String, flg As Boolean) Dim i As Long, j As Long Dim c As Range If sText1 = "" Then Exit Function i = InStr("赤青黄", sText1) 'シート名は変更しない If i = 0 Then Exit Function If sText2 = "" Then Exit Function With Worksheets("Sheet" & CStr(i + 1)) Set c = .Columns(1).Find( _ What:=sText2, _ LookIn:=xlValues, _ LookAt:=xlPart) If c Is Nothing Then MsgBox sText2 & "は見つかりません。", vbExclamation Exit Function End If If flg = False Then Range("B2").Value = c.Value Range("D2").Value = c.Offset(, 1).Value Range("B5").Value = c.Offset(, 2).Value Range("E4").Value = c.Offset(, 3).Value Beep Else '氏名は変更できません。 If c.Offset(, 1).Value <> Range("D2").Value Then c.Offset(, 1).Value = Range("D2").Value j = j + 1 End If If c.Offset(, 2).Value <> Range("B5").Value Then c.Offset(, 2).Value = Range("B5").Value j = j + 1 End If If c.Offset(, 3).Value <> Range("E4").Value Then c.Offset(, 3).Value = Range("E4").Value j = j + 1 End If If j > 0 Then MsgBox j & "項目書き換えました。", vbInformation End If End If End With End Function
関連するQ&A
- エクセルの検索関数。
こんにちわ。 sheet1に、 A B C 1 M 赤 10M 2 M 青 15M 3 M 黄 13M 4 C 赤 15M 5 C 青 18M 6 C 黄 13M ・ ・ ・ と言うデータが入っているとします。 sheet2には A B C D 1 M 黄 20 2 C 青 30 3 M 赤 25 4 C 赤 28 5 C 青 21 6 C 黄 15 ・ ・ ・ と言う表が入っていて Cの列にそれぞれの値、 たとえばMの黄は「13M」、Cの赤は「15M」と言うように抽出し Dの列の値を掛けたものの値を表示したいのです。 どうしても関数を上手くつなげる事が出来ませんし、 VLOOKUPを使おうとしても上手く抽出が出来ません。 どなたか教えてください。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- エクセルで別シートから一つのシートに低い数字を表示
エクセルで同一形式の8枚の別シートから1枚のシートへ一番価格が低いものを表示させたいんです。さらに表示させたシートの色に表示させる様にしたいです。 例 シート1 シート色赤 A 100 B 200 C 300 シート2 シート色青 A 200 B 100 C 300 シート3 シート色黄 A 300 B 200 C 100 合計シート A 100 赤 B 100 青 C 100 黄 数字だけでも表示できると助かるのですが やはり色もつけるとなるとマクロを組まないといけないのでしょうか?
- ベストアンサー
- オフィス系ソフト
- エクセルについての質問です。
エクセルについての質問です。 Aとういうブックから(以後A)Bというブック(以後B)にデータを吸出し、Aに入力されているデータのうち数個をBに集めた際、 Bに吸い出したデータの中から、セルに入力されたデータの右から3個の文字がこの文字だったらシート2へとか左から幾つめがこの文字だったらシート3へとかって出来るのでしょうか・・・?分かりづらいかもですが例を挙げさせて頂きます・・・ 例) ブックA←毎日データを入力(フォーマット等が専用で有り、会社として使用方法が決められているブック) ブックB←Aに入力されたデータのうち幾つかを集め他店と共有して情報を読み取る Aのシート1に入力されているデータ ↓ Bのシート1へ='[ブックA]シート1'!$A1等を使用しデータの吸出し A B C D E F 1 日付 氏名 伝票No. 品番 品名 数量 2 10/1 山本 001 123 aaa a 2 3 10/2 佐藤 002 122 aaa b 1 4 10/3 加藤 003 213 a ccc 1 ←AからBのシート1に集められるデータの内容 5 10/4 田中 004 312 a ddd 1 (投稿の仕様上?でスペースが無くなって行列が合わなくなってますが・・・) : : : : ここからE列に入力されたデータを判別してシート2以降に振り分けをしていきたいのですが・・・ aaaという商品にはaaa a、aaa b、aaa cがあり、aという商品にはa ccc、a dddとある場合、 E列に入力されていくデータの前後の文字列を判別して、D、E、Fをシート2以降に振り分けていくことは可能なのでしょうか・・・? E列に入力された文字列の前3つがaaaだった場合、同一行のD、E、Fをシート2へとか、 E列に入力された文字列の後ろ3つがcccだった場合、同一行のD、E、Fをシート3へ等の 振り分けをしたいのですが・・・・ 質問の仕方が悪すぎてとても分かりづらいですが、これかなって思われる方・・・ご回答お願いします・・・ 補足 品名に半角スペースありだったり半角スペースなしで10文字くらいの文字だったりとランダムです・・・ LEFT、MID、RIGHT関数を使用しようと思ったのですが上手くいかずで・・・
- ベストアンサー
- オフィス系ソフト
- エクセルで質問です。
エクセルで質問です。 sheet1に A B C D 1 No. グループ 氏名 住所 2 3 1 C 佐藤 東京 4 2 B 鈴木 埼玉 5 3 A 加藤 千葉 6 4 B 本多 東京 このようなデータがたくさんあります。(左の数字は行番号、上のアルファベットは列番号) これを別シートにグループ順に A B C D 1 No. グループ 氏名 住所 2 3 1 A 加藤 千葉 4 2 B 鈴木 埼玉 5 3 B 本多 東京 6 4 C 佐藤 東京 と表示させる方法はありますか。 エクセルに詳しくないのですが どなたか助けていただければと思います。
- ベストアンサー
- その他(インターネット・Webサービス)
- エクセルの突き合わせ方法について
同じシート内でC列にあるキーワードを[A列]と[B列]から検索して、結果を[D列]に返す。完全一致は’○’、一部一致は’△’、見つからない場合は’×’とする。 また、結果文字を色分け(検索キーワード含め)できると助かります。 ’○’は青、’△’は黄色、’×’は赤色。 よろしくお願いいたします。 <条件> ・[A列]は[C列]から検索したい一部のキーワード。見つかれば’△’ ・[B列]は[C列]と完全に一致した場合のみ’○’ ・[B列]の一部が[C列]に見つかっても’×’ ・[B列]と[C列]が完全一致すれば、その一部は必ず[A列]に存在する が結果は’○’で返す。 <具体例1> [A列] [B列] [C列] [D列] 111(赤) 222AAA(青) 222AAA ○(青) 222(黄) 110AAC(青) 999AAC ×(赤) 333(赤) 111aaa(赤) 110AAC ○(青) 444(赤) 112bbb(赤) 110zzz ×(赤) 555(赤) 113ccc(赤) 222yyy △(黄)
- ベストアンサー
- オフィス系ソフト
- ○個以上ある同じ値を抽出する関数
シート1のA列にデータがあります。 A 1 赤 2 赤 3 青 4 赤 5 黄 6 黄 7 黄 8 青 シート2のA列にシート1のA列のデータで同じデータで3個以上あるデータのみ抽出したいのですが、ご教授願います。
- ベストアンサー
- オフィス系ソフト
- エクセル 関数を使わずにデータを取りたい
EXCELを使ってデータ入力をしたいです。 下の図のように、シート1のA列にコードを入力すると、シート2のテーブルから値を引っ張ってくるようにしたい。 たとえば、シート1のA1に"C001"を入力したら、B1に"赤"が自動入力されるようにしたい。 シート1 A列 B列 行1 C001 シート2 A列 B列 行1 C001 赤 行2 C002 青 行3 C003 黄色 ただし、シート1のB列の値は、入力後に編集するため、ここには計算式を入れたくないのです。 なので、通常ならばB列にVLOOKUP関数を使えばすむことですが、計算式を入れずに上記を実現する方法を教えてください。
- 締切済み
- Visual Basic
- エクセルで質問です
エクセルで質問です。 sheet1に A B C D 1 No. グループ 氏名 住所 2 3 1 C 佐藤 東京 4 2 B 鈴木 埼玉 5 3 A 加藤 千葉 6 4 B 本多 東京 このようなデータがたくさんあります。(左の数字は行番号、上のアルファベットは列番号) これを別シートにグループ順に A B C D 1 No. グループ 氏名 住所 2 3 1 A 加藤 千葉 4 2 B 鈴木 埼玉 5 3 B 本多 東京 6 4 C 佐藤 東京 と表示させる方法はありますか。 sheet1には都度入力されるので、並べ替えなどではなく vlooupとか関数の活用で何とかならないものでしょうか。 エクセルに詳しくないのですが どなたか助けていただければと思います。
- ベストアンサー
- その他(インターネット・Webサービス)
- エクセルで動的に取捨選択させる方法
エクセルにて以下の事を試したいのですが可能なのでしょうか? (1) まず最初に、Sheet1 と Sheet2 に全く同じ表を用意します。 (2) Sheet1の表には、 赤 100 a 青 300 b1 赤 100 a 赤 100 a 白 500 c 青 310 b2 青 320 b3 赤 100 a と、手入力します。 (3) この時、Sheet1にデータを入力したと同時に、Sheet2の方では自動で、Sheet1の1列目が『青』となっている行だけを拾ってSheet2の表に表示させたいのです。 青 300 b1 青 310 b2 青 320 b3 と、言った具合いです。 私なりに、IF文を使って『セルA1が青であれば表示させ、それ以外であれば表示させない。』という感じで、 ・Sheet2のA1に、 =IF(Sheet1!A1="青",Sheet1!A1,"") ・同様に、Sheet2のB1に、 =IF(Sheet1!A1="青",Sheet1!B1,"") ・同様に、Sheet2のC1に、 =IF(Sheet1!A1="青",Sheet1!C1,"") とし、あとは表の下までオートフィルしてあげたのですが、これだと青以外が入力されていたセルの位置が虫喰い(空白のセル)のようになってしまい見た目がよくありません。 青 300 b1 青 310 b2 青 320 b3 と、なってしまいます。できればキレイに見えるように自動で上詰めにしたいのですが、方法がわからず仕方なく、虫喰いの行を一つずつ手作業で『表示させない』にしてやっています。 (※行を削除すると式がずれてしまいエラーになってしまうため) 何か良い改善方法、お知恵がありましたら、ご助力のほどを是非とも宜しくお願い致します。 それとも、エクセルで根本的にそこまでの機能は有してないのでしょうか?
- 締切済み
- オフィス系ソフト
お礼
お察しの通り、マクロは全くの初心者です。いろいろ調べながら試行錯誤して作成しています。しかし、あなた様の記述を入力したら、なんとか思い通りに作成することができました。ありがとうございました。なるべく、勉強を積み重ね、自分で作成できるように努力していきますので、もし、また質問するようなことがありましたら、どうぞよろしくお願い致します。