[[20150113220021]] 『バーコードを読ませた後に選択セルを移動させたい』(aoi) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『バーコードを読ませた後に選択セルを移動させたい』(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


ichinoseさんこんばんわ aoiです。

 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

ichinoseさん、稲葉さん こんばんわaoiです。

 私の日本語分かりにくくてごめんなさい><
私がしたかったのは、稲葉さんが解釈してくれた通りの事でした。
これからは回答してくれる方に分かりやすく書く様に努力します。

 後、元々書かれていたマクロは私が書いたのではなくて
会社の誰かが書いてくれたものです。誰かが作ってくれたファイルを
使わせてもらってるのですが、こういう事(今回の内容)が出来れば
もっと便利なのになぁと思って質問させて頂きました。

 コードの説明や初心者向けのコード提示までありがとうございました。

(aoi) 2015/01/14(水) 22:10


 >私の日本語分かりにくくてごめんなさい
 いえ、とんでもないです。よく読めば、私の勘違いでした。

 失礼しました。

(ichinose ) 2015/01/15(木) 03:52


こんばんわ aoiです。

 以前教えて頂いて、何の問題もなく運用出来ていたのですが、
今回新たにこういう事ができないかなぁ。と思って投稿させて頂きます。

 通常時は、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です。

 マナさん
アドバイスありがとうございます。
列を非表示にすると入力されてる部分が見えなくなったりするので
今回は非表示にする事は出来ないです。

 稲葉さん
教えて頂いた通りにすると、思い通りの結果が得られました。
今回もありがとうございました。感謝です。

 デイトさん
あるタイミング・・・特に決まっておらずバラバラです。
考えて頂きありがとうございました。

(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.