Excel VBA質問箱 IV

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

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


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

【78022】Re:ピボットテーブルからの安全なデータ...
お礼  りった  - 16/3/7(月) 11:32 -

引用なし
パスワード
   いただいたサンプルコードをデバッグ実行したら、何やってるかわかりました。
私が考えていたのよりずっと安全です。ありがとうございます。
・ツリー全体表示

【78021】Re:ピボットテーブルからの安全なデータ...
お礼  りった  - 16/3/7(月) 10:06 -

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

PivotTablesというのを使うんですね。
Rangeで見に行っているのがそもそも駄目だったんだと思います。
PivotTablesでググって検討します。
参考になりました。ありがとうございます。
・ツリー全体表示

【78020】Re:別ファイルにあるセル範囲を配列に格...
お礼  ayu  - 16/3/7(月) 7:43 -

引用なし
パスワード
   ▼β さん:
お返事遅くなりました。恥ずかしながら、自分が指定したセル範囲が右の方にあり、画面をスクロールしないと見えませんでした。教えて頂いたコードを使って集計してみます。また詰まったら質問させて頂きます。どうもありがとうございました!
>▼ayu さん:
>
>>左側で指定したセル範囲に右側のA2のFormulaをコピーし、
>>右側のセル範囲の値を左側で設定したシートのセル範囲にコピーする
>>ということであってますでしょうか?
>
>A2のFormula というのが、ちょっと変ですけど、以下のようなことです。
>
>たとえばステップ実行はご存じでしょうか。
>VBE画面で、Sample2 の任意のところをクリックしてF8 を押します。
>最初は Sub Sample2() が黄色くハイライトされます。
>で、そのまま F8 を押していきます。
>  shT.Range("A1:F2").Value = shT.Range("A1:F2").Value
>ここが黄色くなったら F8を押さず、マクロブックの "転記先のシート名" をみてください。
>この A1:F2 に、元ブックを参照する参照式が入っています。
>
>式と表示されている値を確認したら、VBE画面に戻り End Sub まで F8 を押していって下さい。
>
>Sample がうまくいったということですから、同じ環境(フォルダやブック名やシート名)で実行すれば
>シートに参照式がセットされ、そこで参照している値がシートに表示されているはずなんですが。
・ツリー全体表示

【78019】Re:VLOOKUP関数の検索値を変数にする方法
発言  β  - 16/3/6(日) 18:53 -

引用なし
パスワード
   ▼真田● さん:

>は、このまま使えるVBAなのでしょうか?

いえいえ、サンプルというかコードの雛形というか、考え方です。

>マクロの記録で処理すると原因不明のエラーが出やすいので
>使用は控えたいところです。

そのまま使えることもありますが、それは、例外かもですね。
通常は、固定領域であったり、固定のシートになっていたり
なによりも Select とか Selection がてんこ盛りに生成されますから
お化粧直しをして使います。

でも、コードの雛形を提供してくれるありがたい機能ですよ。

【このまま使えるか】というコメントも、その一端ですけど、
雛形を自分の要件に合わせてチューニングするようにしていかないと
【そのままコピペで自分の要件をカバーして満足すり結果が得られるコード】
だけを求めると、なかなか身につきませんよ。

ということで、以下も【サンプル】です。
新規ブックで試してください。
まず、MakeData を実行してください。I列、J列にリストを作成します。

次にSampleを実行してください。
I列、J列のリスト範囲を自動的に判定取得して、その領域に対して
変数 s で検索をかけています。
最初はリスト内に存在する値、次にリスト内に存在しない値で
VLOOKUPをかけています。

Sub MakeData()
  Dim i As Long
  
  Cells.Clear
  
  For i = 1 To 100
    Cells(i, "I").Value = "a" & i
    Cells(i, "J").Value = "x" & i
  Next
    
End Sub

Sub Sample()
  Dim z As Variant
  Dim s As String
  
  s = "a60"
  
  z = Application.VLookup(s, Range("I1", Range("I" & Rows.Count).End(xlUp)).Resize(, 2), 2, False)
  If IsError(z) Then
    MsgBox s & " は見つかりません"
  Else
    MsgBox "結果は " & z & " でした"
  End If
  
  
  s = "a999"
  
  z = Application.VLookup(s, Range("I1", Range("I" & Rows.Count).End(xlUp)).Resize(, 2), 2, False)
  If IsError(z) Then
    MsgBox s & " は見つかりません"
  Else
    MsgBox "結果は " & z & " でした"
  End If
  
End Sub
・ツリー全体表示

【78018】Re:VLOOKUP関数の検索値を変数にする方法
発言  マナ  - 16/3/6(日) 18:52 -

引用なし
パスワード
   ▼真田● さん:

ご自身でも仰られたとおりC列に数式を、想定される行数分以上入力しておけば
マクロが不要ではないかという意味です。

マクロで変数を使うとするとこんな感じでしょうか。
商品コード.xlsxは同時に開いているという前提です。

Sub test()
  Dim 検索値 As Range
  Dim 検索範囲 As Range
  Dim 検索結果
  
  With ActiveSheet
    .Range("C2", .Range("C" & .Rows.Count).End(xlUp)).ClearContents
    Set 検索値 = .Range("I2", .Range("I" & .Rows.Count).End(xlUp))
  End With
  
  Set 検索範囲 = Workbooks("商品コード.xlsx").Worksheets("Sheet1").Range("A1:B394")
  
  検索結果 = Application.VLookup(検索値, 検索範囲, 2, False)
  検索値.Offset(, -6).Value = 検索結果

End Sub
・ツリー全体表示

【78017】Re:VLOOKUP関数の検索値を変数にする方法
質問  真田● E-MAIL  - 16/3/6(日) 17:40 -

引用なし
パスワード
   予め数式を入れるというのは
βさんへの質問の中で書いた

検索結果=Variant型変数

検索結果 = Range("C2", Range("C" & Rows.Count).End(xlUp)).Value

のような数式の事を指しているのでしょうか?

数式の正誤のアドバイスも兼ねて、
βさんへの一番新しい質問を見ていただけると助かります。
・ツリー全体表示

【78016】Re:VLOOKUP関数の検索値を変数にする方法
質問  真田● E-MAIL  - 16/3/6(日) 17:35 -

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

教えていただいた内容、だいたい分かってきました。

この数式に問題があるでしょうか?


Variant型変数 = Application.VLookUp(商品コード,[商品コード.xlsx]Sheet1!A$1:B$394,2,FALSE)
  Dim 商品コード As String
  商品コード = Range("I2", Range("I" & Rows.Count).End(xlUp)).Value


If IsError(Variant型変数) Then
Variant型変数=N/S
Else
検索結果=Variant型変数

  検索結果 = Range("C2", Range("C" & Rows.Count).End(xlUp)).Value

End If
・ツリー全体表示

【78015】Re:VLOOKUP関数の検索値を変数にする方法
発言  マナ  - 16/3/6(日) 16:33 -

引用なし
パスワード
   ▼真田● さん:
>想定できるデータの数以上に
>C列に数式をコピーして入れておけばマクロの記録でも対応できますが

予め数式を入れておけば、マクロはいっさい不要だと思いますが。
・ツリー全体表示

【78014】Re:VLOOKUP関数の検索値を変数にする方法
回答  真田● E-MAIL  - 16/3/6(日) 16:20 -

引用なし
パスワード
   想定できるデータの数以上に
C列に数式をコピーして入れておけばマクロの記録でも対応できますが
マクロの記録で処理すると原因不明のエラーが出やすいので
使用は控えたいところです。
・ツリー全体表示

【78013】Re:VLOOKUP関数の検索値を変数にする方法
発言  マナ  - 16/3/6(日) 14:03 -

引用なし
パスワード
   ▼真田● さん:
>I列をループして検索したいと思っております
>I2のデータだけを検索するのであれば下の関数で大丈夫ですが
>VLOOKUP(I2,[商品コード.xlsx]Sheet1!A$1:B$394,2,FALSE)
>

>結果は、C列に反映させたいのですが


I2の検索結果をC2
I3の検索結果をC3
I4の検索結果をC4

という意味でしょうか。
ならば、C列にその式を、フィルコピーするだけでは?
・ツリー全体表示

【78012】Re:VLOOKUP関数の検索値を変数にする方法
質問  真田● E-MAIL  - 16/3/6(日) 13:49 -

引用なし
パスワード
   I列をループして検索したいと思っております

I2のデータだけを検索するのであれば下の関数で大丈夫ですが

VLOOKUP(I2,[商品コード.xlsx]Sheet1!A$1:B$394,2,FALSE)

毎日データが変化するI列全体を検索したいので
検索地を変数で設定したいと思っております。

残念ながら、回答していただいたVBAは理解できないのですが

Variant型変数 = Application.VLookUp(変数,Range("I1:J10"),2,False)
If IsError(Variant型変数) Then
  見つからなかった場合の処理
Else
  見つかった場合の処理
End If

は、このまま使えるVBAなのでしょうか?

お手間取らせて申し訳ございません。

結果は、C列に反映させたいのですが
併せてアドバイスいただけると助かります。
・ツリー全体表示

【78011】Re:シートを顧客ごとに別シートにして見...
お礼  [名前なし]  - 16/3/6(日) 10:08 -

引用なし
パスワード
   ▼β さん:
ごめんなさい;
エクセル学校 質問掲示板にも載せてます。
これから気をつけます。

>▼ヤブヘビ さん:
>
>この掲示板ではマルチポスト許容していますが
>
>マルチポストについて
>別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。当質問箱では、マルチポストは原則認めています。つまり、ほかのサイトで質問したことをこのサイトで質問してもかまわないということです。
>
>しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください。そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。質問しっぱなし、というのはモラルに反します。「解決したからいいや」というのではありません。
>
>また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。
>
>こんなルールがあります。
>
>で、学校もマルチ容認ですが、あちらにもそれなりのルールがあります。
>あちらにコメントを書きこんでおきました。
・ツリー全体表示

【78010】Re:シートを顧客ごとに別シートにして見...
発言  β  - 16/3/6(日) 9:27 -

引用なし
パスワード
   ▼ヤブヘビ さん:

この掲示板ではマルチポスト許容していますが

マルチポストについて
別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。当質問箱では、マルチポストは原則認めています。つまり、ほかのサイトで質問したことをこのサイトで質問してもかまわないということです。

しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください。そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。質問しっぱなし、というのはモラルに反します。「解決したからいいや」というのではありません。

また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。

こんなルールがあります。

で、学校もマルチ容認ですが、あちらにもそれなりのルールがあります。
あちらにコメントを書きこんでおきました。
・ツリー全体表示

【78009】シートを顧客ごとに別シートにして見やす...
質問  ヤブヘビ  - 16/3/6(日) 8:50 -

引用なし
パスワード
   Excel2007で顧客の管理をしたいのですが、以下の方法がわかりません。
Excelは表を作るくらいしかできません^^;

1枚のシートに以下の表を書き続けています。

A B C D E F G H I J K L M (列)
日付 方法 顧客名 担当者 商品 コード 動き 車種 料金 区間 料金 その他 料金
2/5 TEL カネボウ 木村 蓋 BB 興味あり
mail 日清 田中 ラベル CC 送付
2/6 TEL カネボウ 木村 蓋 BB サンプル出し
TEL サントリー 蓮見 ロゴ TL 依頼あり
2/7 mail 日清 小林 イラスト RB チェック
TEL 日清 田中 ラベル CC 手配あり
2/8 TEL カネボウ 森 ラベル CC 打診あり
来社 サントリー 蓮見 ロゴ TL 選択
mail 日清 田中 ラベル CC 納期
2/9 TEL カネボウ 木村 蓋 BB 保留
TEL カネボウ 木村 ライン RP 依頼あり

これをsheetを分けて、以下のように、管理したいです。
sheet2には、名前を列C-列F(カネボウ‐BB)にして、
A B C D E F G H I J K L M (列)
日付 方法 顧客名 担当者 商品 コード 動き 車種 料金 区間 料金 その他 料金
2/5 TEL カネボウ 木村 蓋 BB 興味あり
2/6 TEL カネボウ 木村 蓋 BB サンプル出し
2/9 TEL カネボウ 木村 蓋 BB 保留

sheet3には、名前を列C-列F(日進‐CC)にして、
A B C D E F G H I J K L M (列)
日付 方法 顧客名 担当者 商品 コード 動き 車種 料金 区間 料金 その他 料金
2/5 mail 日清 田中 ラベル CC 送付
2/7 TEL 日清 田中 ラベル CC 手配あり
2/8 mail 日清 田中 ラベル CC 納期

つまり、”顧客名‐コード”のシートを、ある組み合わせ分つくりたいのです。
もちろん、入力するのは、今の1枚のシート上で、分けたシートは自動的に内容が反映され
て、分けたシートは見るだけ。これって、できますか?
・ツリー全体表示

【78008】Re:ピボットテーブルからの安全なデータ...
発言  γ  - 16/3/4(金) 22:52 -

引用なし
パスワード
   ▼りった さん:
> (3) なにかもっといい方法有りますか?
と言われても、

>全販社のファイルを作ります。
そのファイルがどんなフォーマットなのかを示さないとわかりません。
途中プロセスに関する質問をされる前に、
全体としてなにをしたいのかを示していただきたい。
・ツリー全体表示

【78007】Re:ピボットテーブルからの安全なデータ...
発言  マナ  - 16/3/4(金) 22:24 -

引用なし
パスワード
   ▼りった さん:

安全?かどうかはわかりませんが
地道に1つずつ確認していく方法です。

Sub test()
  Dim pvf As PivotField
  Dim pvi As PivotItem
  Dim s As String
  Dim flg As Boolean
  
  s = "ドイツ"

  For Each pvf In ActiveSheet.PivotTables(1).PivotFields
    For Each pvi In pvf.PivotItems
      If pvi.Name = s Then
        MsgBox "フィールド名は: " & pvf.Name
        flg = True
        Exit For
      End If
    Next
    If flg Then Exit For
  Next
  
  If flg = False Then
    MsgBox "その名前は見つかりませんでした"
  End If
  
End Sub
・ツリー全体表示

【78006】Re:VLOOKUP関数の検索値を変数にする方法
発言  β  - 16/3/4(金) 21:17 -

引用なし
パスワード
   ▼真田● さん:

ここはVBAの板ですから、VBAでいいのですね?

単純に 固定値 を 変数にすればいいのですが?

結果 = WorksheetFunction.VLookUp(変数,Range("I1:J10"),2,False) とか。

ただし、見つからなかった場合にエラーになってしまいますので、
エラー対策(エラートラップ等)をほどこすか、あるいは(こちらがおすすめですが)

Variant型変数 = Application.VLookUp(変数,Range("I1:J10"),2,False)
If IsError(Variant型変数) Then
  見つからなかった場合の処理
Else
  見つかった場合の処理
End If

このようにしておくことが必要ですね。
・ツリー全体表示

【78005】VLOOKUP関数の検索値を変数にする方法
質問  真田● E-MAIL  - 16/3/4(金) 18:10 -

引用なし
パスワード
   VLOOKUP関数の検索値を変数にするには、どうしたらよいのでしょうか?
色々調べたのですが分かりません。

検索対象はI列で、検索データは文字列になります
・ツリー全体表示

【78004】ピボットテーブルからの安全なデータの読...
質問  りった  - 16/3/4(金) 17:03 -

引用なし
パスワード
   各販社の週報(入力ファイル)からデータを取り出し、全販社のファイルを作ります。
週報のデータはピボットテーブルで、行ラベルは、カテゴリ毎/機種毎/販売国です。

販社(ヨーロッパ)からの週報のイメージ
        行ラベル    |3/1|3/2
        オーディオ機器 |  |
         ABC Speaker |  |
          ドイツ   |100|110
          フランス  |200|220
         MP3 PlayerZ |  |
          ドイツ   |100|110
          フランス  |200|220
        テレビ     |  |
         ABC TV 2K  |  |
          ドイツ   |100|110
          フランス  |200|220
         ABC TV 4K  |  |
          ドイツ   |100|110
          フランス  |200|220

※ カテゴリ = {オーディオ機器,テレビ,・・・}
  機種 = {ABC Speaker,MP3 PlayerZ,ABC TV 2K,ABC TV 4K,・・・}
  販売国 = {ドイツ,フランス,・・・}

質問
行ラベルの属性が、カテゴリ/機種/販売国のいずれであるかはどのように判定するのが安全ですか?
(1) インデントレベルで判定 → グループ化されていると困る
(2) カテゴリ一覧、国一覧の表をあらかじめ用意し、該当有無を調べる → 微妙に違う書き方されると困る。
(3) なにかもっといい方法有りますか?
・ツリー全体表示

【78003】Re:印刷が交互に出ます。
お礼  room2  - 16/3/3(木) 12:21 -

引用なし
パスワード
   ▼γ さん:
返信ありがとうございます。
大げさですみません。
順番に従わないケースばかりです。
遊びの時間を入れてみます。
・ツリー全体表示

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