Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


260 / 3841 ページ ←次へ | 前へ→

【77237】Re:ルーブ
質問  翔子  - 15/6/25(木) 12:37 -

引用なし
パスワード
   kanabun様
ありがとうございます。

「名前が適切ではないとでました」

【77221】Re:関数ではなくてマクロでやりたいのです。
の、Private Sub Worksheet_Change(ByVal Target As Range)
と同じ所にあるからですか?
・ツリー全体表示

【77236】Re:ルーブ
発言  kanabun  - 15/6/25(木) 12:05 -

引用なし
パスワード
   ▼翔子 さん:

>Sheet(注文書)E2にコードを入れボタンを押すと
>Sheet(注文書)E3にコードの品名が出てくるようになっております。
>
>*Sheet(注文書)E2にコードを入れenterキーでしたいのですが
> 可能でしょうか教えてください

可能です。
いま標準モジュールにそのコードを書いていますが、
それを 注文書シートの シートモジュールに変更し、
たとえば、以下のようにコードを書けばいいです。

Private Sub Worksheet_Change(ByVal Target As Range)

  If Target.Address(0, 0) <> "E2" Then Exit Sub
  
  Dim Rg As Range
  Dim m As Variant
  With Worksheets("詳細") '別シートのコード照合セル範囲
    Set Rg = .Range("E2", .Cells(.Rows.Count, "E").End(xlUp))
  End With
  m = Application.Match(Target, Rg, 0) 'Match関数で「詳細」シート検索
  Application.EnableEvents = False
  If IsNumeric(m) Then
    Target.Offset(1).Value = Rg.Item(m, 2).Value
  Else
    Target.Offset(1).ClearContents
    MsgBox "入力されたコードはありません"
  End If
  Application.EnableEvents = True
  
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
は シートに入力があったとき 実行されます。

いまは [E2]セル以外は入力があっても、さっさと抜けるようにしてあります。

今はMatch関数で コードを検索していますが、
やりたいことは VLookUpなので それを使っても可能です。
・ツリー全体表示

【77235】ルーブ
質問  翔子  - 15/6/25(木) 11:10 -

引用なし
パスワード
   よろしくお願いします。

下記のモジュールは
Sheet(注文書)E2にコードを入れると
Sheet(詳細)E列”コード”、F列”品名”
1行目はタイトル、2行目から”1から最終行”、”品名”が
入っています。

Sheet(注文書)E2にコードを入れボタンを押すと
Sheet(注文書)E3にコードの品名が出てくるようになっております。

*Sheet(注文書)E2にコードを入れenterキーでしたいのですが
 可能でしょうか教えてください

Sub 部署コード検索() 'ボタン検索
  Dim i As String '注文書シート(E2)
  Dim s As String '詳細シート
  Dim r As String '詳細シート 部署コード2行目
  Dim m As Integer 'MsgBox
  
  i = Worksheets("注文書").Range("E2")
  r = 2: m = 1
  Do While Worksheets("詳細").Cells(r, 5) <> ""
    s = Worksheets("詳細").Cells(r, 5)
    If StrComp(i, s) = 0 Then
      Worksheets("注文書").Range("E3").Value = Worksheets("詳細").Cells(r, 6)
      m = 3
      Exit Do
    End If
    r = r + 1
  Loop
    
  If m = 1 Then
    MsgBox "入力されたコードはありません"
  End If
End Sub
・ツリー全体表示

【77234】Re:Excel2010 ソートについて
お礼    - 15/6/21(日) 7:31 -

引用なし
パスワード
   ▼マナ さん:
>▼良 さん:
>
>参考になるでしょうか
>ht tp://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=170446&rev=0

参考にします
ありがとうございます
・ツリー全体表示

【77233】Re:関数ではなくてマクロでやりたいので...
お礼  翔子  - 15/6/20(土) 21:08 -

引用なし
パスワード
   β様

説明ありがとうございました。
勉強になりました
・ツリー全体表示

【77232】Re:Excel2010 ソートについて
発言  マナ  - 15/6/20(土) 20:56 -

引用なし
パスワード
   ▼良 さん:

参考になるでしょうか
ht tp://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=170446&rev=0
・ツリー全体表示

【77231】Excel2010 ソートについて
質問    - 15/6/20(土) 20:51 -

引用なし
パスワード
   Sub Macro1()

Application.AddCustomList ListArray:=Array("袋B", "袋A", "L", "N", "LL", "P", B", "他")
Range("D23:M40").Sort Key1:=Range("L23"), Order1:=xlAscending, Header:=xlNo, OrderCustom:=Application.CustomListCount + 1
Application.DeleteCustomList (Application.CustomListCount)

end sub

上記コードにてソートを行っております
ソート順になるのですが、値が複数あった場合は、
必ず一番上に持って行きたいのですが
うまく出来ません

たとえば袋A、袋B、L、LL、袋B とありましたら
袋B、袋B、袋A、L、LL としたく思います

ご教授いただけないでしょうか?
・ツリー全体表示

【77230】Re:マクロボタン シートごとに有効にし...
発言  カリーニン  - 15/6/20(土) 0:58 -

引用なし
パスワード
   コードをアップしてみてはいかがでしょう?

おそらく、シート名がハードコーディングされているのだと思います。

ActiveSheet
などと変更すればいいだけかもしれません。

シートモジュールに記述されているのなら、
Me
とすればいけるはずです。
・ツリー全体表示

【77229】Re:マクロボタン シートごとに有効にし...
発言  カリーニン  - 15/6/20(土) 0:56 -

引用なし
パスワード
   コードをアップしてみてはいかがでしょう?

おそらく、シート名がハードコーディングされているのだと思います。

ActiveSheet
などと変更すればいいだけかもしれません。
・ツリー全体表示

【77228】マクロボタン シートごとに有効にしたい...
質問    - 15/6/19(金) 18:15 -

引用なし
パスワード
   excel2010です。完全なる初心者です。
どうか教えて頂きたいのですが・・・

1シート目に「日付順に並び替え」「担当者順に並び替え」
などが出来るマクロボタンを作成しました。

そのシートをコピーし、同じシートを作りました。

2シート目にあるボタンを押すと当たり前ですが、
1シート目が並び替えられます。

これを「そのシートの内容を並び替え」るように
変えるにはどうしたら良いでしょうか。
教えてください。
・ツリー全体表示

【77227】Re:関数ではなくてマクロでやりたいので...
発言  β  - 15/6/19(金) 11:40 -

引用なし
パスワード
   ▼翔子 さん:

>無駄なイベント連鎖とは何ですか?
>何かあるのですか?

Changeイベントはご存知の通り、そのシートのセルに変更があった場合にとんできますね。

で、この処理コードの中で

c.Offset(, -1).Value = Range("E3").Value

これは変更のあったセルの1つ左、つまりC列のセルに書き込みを行っていますね。
すると、その瞬間に、Changeイベントが発生して、このプロシジャに再入してきます。
先頭に、D6:D10 以外の変更なら抜けるコードがありますので、何もしないで抜けるわけですが
無駄ですよね。

また、要件によって先頭の領域チェックがないような処理の場合、無限ループにおちります。

なので、Chengeイベント内で、セル変更をする場合はkanabunさんが再掲されたように
Application.EnableEvents を事前に False にし、変更が終わったら True にするのが
「鉄則」です。
・ツリー全体表示

【77226】Re:関数ではなくてマクロでやりたいので...
質問  翔子  - 15/6/19(金) 8:53 -

引用なし
パスワード
   kanabun様
β様
コメントが大変遅くなりまして申し訳ございません。


kanabun様
<(Deleteキーがおされて セルの値がクリアされた時も このマクロは走ります。
<そのばあいは どうしたらいいのかな? 今は、何も書いていません)
Deleteキー押されたときは、そのままでで大丈夫です。
再コメント有難うございました。

β様
<イベント連鎖があっても、最初の領域チェックで抜けますので問題はありませんが
<やはり、無駄なイベント連鎖はなくしたほうがいいと思いますが。
無駄なイベント連鎖とは何ですか?
何かあるのですか?
・ツリー全体表示

【77225】Re:vlookup の使用方法
お礼  daisy E-MAIL  - 15/6/18(木) 21:23 -

引用なし
パスワード
   β さん

できました!!!
本当にありがとうございました。
・ツリー全体表示

【77224】Re:vlookup の使用方法
発言  β  - 15/6/18(木) 21:09 -

引用なし
パスワード
   ▼daisy さん:

もし、2007以降なら

=IFERROR(VLOOKUP(A1,Sheet2!A:B,2,FALSE),"")

2003以前なら

=IF(ISERROR(VLOOKUP(A1,Sheet2!A:B,2,FALSE)),"",VLOOKUP(A1,Sheet2!A:B,2,FALSE))
・ツリー全体表示

【77223】vlookup の使用方法
質問  daisy E-MAIL  - 15/6/18(木) 20:25 -

引用なし
パスワード
   Sheet1のA列にID
Sheet2(マスタ)のA列にID、B列に名称が入っています。
Sheet1のC列に、同じ行のSheet1のA列のIDがSheet2にあれば、その行のB列の名称を返し、
なければ、空欄を返す式を入れたいと思います。
どうかご教授ください。
よろしくお願い致します。
・ツリー全体表示

【77222】Re:2つの数式を一緒にしたい
発言  マナ  - 15/6/18(木) 18:37 -

引用なし
パスワード
   =LEFT(A1,12) & IFERROR(VALUE(MID(A1,13,1)),"")
とか
=LEFT(A1,IF(ISNUMBER(VALUE(MID(A1,13,1))),13,12))
・ツリー全体表示

【77221】Re:関数ではなくてマクロでやりたいので...
発言  kanabun  - 15/6/18(木) 17:54 -

引用なし
パスワード
   ▼β さん:
>▼kanabun さん:
>
>やはり、無駄なイベント連鎖はなくしたほうがいいと思いますが。

おお、そうでした。ご指摘、感謝
プロシージャ・コード、再掲します。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range
  Dim c As Range
  Set r = Intersect(Target, Range("D6:D10"))
  If r Is Nothing Then Exit Sub
  
  Application.EnableEvents = False '●追加
  For Each c In r
    If Not IsEmpty(c.Value) Then
      c.Offset(, -1).Value = Range("E3").Value
    End If
  Next
  Application.EnableEvents = True  '●追加
End Sub
・ツリー全体表示

【77220】Re:関数ではなくてマクロでやりたいので...
発言  β  - 15/6/18(木) 17:39 -

引用なし
パスワード
   ▼kanabun さん:

失礼します。
イベント連鎖があっても、最初の領域チェックで抜けますので問題はありませんが
やはり、無駄なイベント連鎖はなくしたほうがいいと思いますが。
・ツリー全体表示

【77219】Re:関数ではなくてマクロでやりたいので...
発言  kanabun  - 15/6/18(木) 17:03 -

引用なし
パスワード
   ▼翔子 さん:


>E3に値が入っています。
>1 D6に値が入ったら、C6にE3の値が入るように。
>2 D7に値が入ったら、C7にE3の値が入るように。
>3 D8に値が入ったら、C8にE3の値が入るように。
>4 D9に値が入ったら、C9にE3の値が入るように。
>5 D10に値が入ったら、C10にE3の値が入るように。
>したいのですが、

シートのモジュール(マクロを書くところ)に
以下のコードを記述します。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim r As Range
  Dim c As Range
  Set r = Intersect(Target, Range("D6:D10"))
  If r Is Nothing Then Exit Sub
  
  For Each c In r
    If Not IsEmpty(c.Value) Then
      c.Offset(, -1).Value = Range("E3").Value
    End If
  Next
End Sub

このコードは そのワークシートのセルに変化があったときに 動きます。

>  Set r = Intersect(Target, Range("D6:D10"))

このコードは 変化のあったセル Target(複数セルのばあいも考慮) と
[D6:D10] と比べ、変化のあったセルTarget が [D6:D10]のなかに入っているとき
のみ、それ以降の処理を実行します。

>    If Not IsEmpty(c.Value) Then
>      c.Offset(, -1).Value = Range("E3").Value
>    End If

ここは 変化のあったD列のセルの値が 空 でないときには [E3]セルの値を
そのセルの比ダル隣りのC列セルに 値コピー しています。

(Deleteキーがおされて セルの値がクリアされた時も このマクロは走ります。
そのばあいは どうしたらいいのかな? 今は、何も書いていません)
・ツリー全体表示

【77218】関数ではなくてマクロでやりたいのです。
質問  翔子  - 15/6/18(木) 15:27 -

引用なし
パスワード
   よろしくお願いします。

E3に値が入っています。
1 D6に値が入ったら、C6にE3の値が入るように。
2 D7に値が入ったら、C7にE3の値が入るように。
3 D8に値が入ったら、C8にE3の値が入るように。
4 D9に値が入ったら、C9にE3の値が入るように。
5 D10に値が入ったら、C10にE3の値が入るように。
したいのですが、IF関数ではなくマクロでやりたいのですが
教えてください
よろしくお願いします。
・ツリー全体表示

260 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free