[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『バーコードを読ませた後に選択セルを移動させたい』(aoi)
こんばんわ aoiです。
A列(A1とかA2とかA3)を選択した状態でバーコードをピコッと読ませると E列(E1とかE2とかE3)に移動する様にしたいです。 現在下記のマクロが書かれているのですが、このマクロを残したままの状態で 上記の事をしたいのですがどの様にすればいいのか分かりません。 教えて頂けないでしょうか。 宜しくお願いします。
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Target.Offset(, 3).Value = Date End If If Target.Column = 7 Then Target.Offset(, 9).Value = Date End If End Sub
< 使用 Excel:Excel2007、使用 OS:Windows7 >
提示されたコードで A列にバーコードを読み込ませると、どのような結果になりますか?
(ichinose ) 2015/01/13(火) 22:41
A列にバーコードを読み込ませると、、、 A1にバーコードを読み込ませると、D1に自動でその日の日付が入力されて、カーソルはB1に移動。 A2にバーコードを読み込ませると、D2に自動でその日の日付が入力されて、カーソルはB2に移動。 という風になります。 宜しくお願いします。
(aoi) 2015/01/13(火) 23:40
> A列にバーコードを読み込ませると、、、 >A1にバーコードを読み込ませると、D1に自動でその日の日付が入力されて、カーソルはB1に移動。 >A2にバーコードを読み込ませると、D2に自動でその日の日付が入力されて、カーソルはB2に移動。
これだけの記述が出来る方が、数行のVBAコードの質問、 全くVBAの知識がない ということでしょうか?
記述された内容は、正確で非常にわかりやすいものでした。できないんですよ、中々 こういう記述が・・。 基礎から勉強されてみては いかがですか?
提示されたコードは セルに値を入力すると、実行される イベントプログラムです。
Private Sub Worksheet_Change(ByVal Target As Range) 'Targetには、値が入力されたセルの情報が返ります
If Target.Column = 1 Then '入力されたセルの列番号が1(つまり、A列)だったら
Target.Offset(, 3).Value = Date '入力されたセルから3列右の列、B,C,Dだから D列に日付入力
End If
If Target.Column = 7 Then '入力されたセルの列番号が7(つまり、G列)だったら
Target.Offset(, 9).Value = Date '↑入力されたセルから9列右の列、H,I,J,K,L,M,N,O,Pだから P列に日付入力
End If
End Sub
プログラムにコメント付けると こんな内容のコードです。
だから、
セルA1にデータが入力されると、対応するD列のセルD1に、 セルA2にデータが入力されると、対応するD列のセルD2に本日の日付が入力されます。
では、A列にバーコードが入力されたら、 その内容を対応するE列に移動には?
E列にA列の内容を入力すればよいですね!! target.offset(,4).value=target.value
さて、このコードをどこに入れるか? まず、これを考えてみてください。
(ichinose ) 2015/01/14(水) 07:15
ごめんなさい、横やりです!
aoiさんの質問は バーコードをE列に「表示(移動)」させるのではなく カーソルをE列に 「移動(Select)」したいように思えます! >このマクロを残したままの状態で >(現在のコードでは)カーソルはB1に移動。 この2行から推測。
ですので Target.Offset(,4).Select になるかと思われます!
aoiさん 提示されたコードではOffsetでセルを指定していますが、 別の書き方をすると初心者には分かりやすいかもしれません。 > If Target.Column = 1 Then > Target.Offset(, 3).Value = Date > End If こちらのコードは If Target.Address Like "$A$*" Then Cells(Target.Row, "D").Value = Date End If あるいは Range("D" & Target.Row).Value = Date こんな感じに置き換えることが可能です。
勘違いだったら済みません。 (稲葉) 2015/01/14(水) 08:38
私の日本語分かりにくくてごめんなさい>< 私がしたかったのは、稲葉さんが解釈してくれた通りの事でした。 これからは回答してくれる方に分かりやすく書く様に努力します。
後、元々書かれていたマクロは私が書いたのではなくて 会社の誰かが書いてくれたものです。誰かが作ってくれたファイルを 使わせてもらってるのですが、こういう事(今回の内容)が出来れば もっと便利なのになぁと思って質問させて頂きました。
コードの説明や初心者向けのコード提示までありがとうございました。
(aoi) 2015/01/14(水) 22:10
>私の日本語分かりにくくてごめんなさい いえ、とんでもないです。よく読めば、私の勘違いでした。
失礼しました。
(ichinose ) 2015/01/15(木) 03:52
以前教えて頂いて、何の問題もなく運用出来ていたのですが、 今回新たにこういう事ができないかなぁ。と思って投稿させて頂きます。
通常時は、A列(A1とかA2とかA3)を選択した状態でバーコードをピコッと 読ませると、カーソルがE列(E1とかE2とかE3)に移動する様になっているのですが、 あるタイミング(例えば、月の半ば)から、A列(A1とかA2とかA3)を選択した状態で、 バーコードをピコッと読ませると、G列(G1とかG2とかG3)にカーソルが移動する様に したいのですが、その都度下のコードの"Target.Offset(, 4).Select"←この部分を 変更するのではなくて、シート上に配置した「G列」というボタンを押す事によって、 その後は「E列」というボタンを押すまではずっとカーソルがG列に移動するという様な 事が出来るでしょうか?
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Target.Offset(, 3).Value = Date Target.Offset(, 4).Select End If End Sub
もし出来るなら教えて頂けないでしょうか。 宜しくお願いします。
(aoi) 2015/02/24(火) 22:32
ボタンではなく、都度E列を非表示にしたりしなかったりする。
・非表示ならG列に移動 ・表示ならE列に移動
(マナ) 2015/02/24(火) 23:14
・B-D非表示ならE列に移動 ・B-F非表示ならG列に移動
(マナ) 2015/02/24(火) 23:30
1)クリックする毎に、ボタンの表示が"E","G"交互に切り替わる 2)今のマクロをボタンの表示が移動先の列になるように修正する
でしょうか。
(マナ) 2015/02/24(火) 23:52
マナさんの列の非表示案が簡単そうでいいですね!
一応aoiさんの希望通りかなえるならこんな感じになると思います。 まずリボンの開発タブから 挿入>ActiveXコントロール>コマンドボタン を配置してください。 必ずActiveXコントロールのほう設置してくださいね。
もしコマンドボタンが二つ目なら、下記コードのCommandButton1の部分を実際のオブジェクト名に 適宜変更してください。 下記コードをすべてシートモジュールに記述してください。
開発タブのデザインモードを解除して、ボタンを押すたびに交互に代わることを確認してください。
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Application.EnableEvents = False Target.Offset(, 3).Value = Date Application.EnableEvents = True Target.Offset(, ColSelect).Select End If End Sub Private Function ColSelect() As Long With CommandButton1 ColSelect = IIf(.Caption = "G列", 6, 4) End With End Function Private Sub CommandButton1_Click() With CommandButton1 .Caption = IIf(.Caption = "G列", "E列", "G列") End With End Sub
※Application.EnableEventsの記述を追加 0936 (稲葉) 2015/02/25(水) 09:32
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then If Day(Date) <= 15 Then '中間日まで Target.Offset(, 4).Select Else '中間日後 Target.Offset(, 6).Select End If End If End Sub (デイト) 2015/02/25(水) 09:55
マナさん アドバイスありがとうございます。 列を非表示にすると入力されてる部分が見えなくなったりするので 今回は非表示にする事は出来ないです。
稲葉さん 教えて頂いた通りにすると、思い通りの結果が得られました。 今回もありがとうございました。感謝です。
デイトさん あるタイミング・・・特に決まっておらずバラバラです。 考えて頂きありがとうございました。
(aoi) 2015/02/25(水) 19:36
ヒトリゴト aoiさんのように自分のやりたいことをわかりやすく言葉で表現でき、 常に積極的に改善を考えてくれる部下、いや同僚でもいいのでほしいです。 (稲葉) 2015/02/26(木) 10:17
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.