Excel VBA質問箱 IV

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

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


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

【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 -

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

【78002】Re:別ファイルにあるセル範囲を配列に格...
発言  β  - 16/3/3(木) 11:36 -

引用なし
パスワード
   ▼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 がうまくいったということですから、同じ環境(フォルダやブック名やシート名)で実行すれば
シートに参照式がセットされ、そこで参照している値がシートに表示されているはずなんですが。
・ツリー全体表示

【78001】Re:別ファイルにあるセル範囲を配列に格...
質問  ayu  - 16/3/3(木) 10:55 -

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

こんにちは。先日は色々教えて頂きありがとうございました。あの後実証してみる時間がなくて、最近やっと時間ができましたので、頂いたコードを動かしてみました。最初のサンプルは動作が確認できたのですが、2つ目の方はエラーは出ないのですが、転送先のシートに何も表示されません。そこで、質問があるのですが、

>  shT.Range("A1:F1").Formula = ref & "A2"
>  shT.Range("A2:F2").Formula = ref & "A9"
>  shT.Range("A1:F2").Value = shT.Range("A1:F2").Value

の部分は、左側で指定したセル範囲に右側のA2のFormulaをコピーし、
右側のセル範囲の値を左側で設定したシートのセル範囲にコピーするということであってますでしょうか?
お時間のある時にお返事頂ければ幸いです。
よろしくお願い致します。


>▼ayu さん:
>
>もう1つ。
>転記レイアウトは アップ済みのものとはかえてあります
>外部参照数式を使い、ブックを開かないタイプ。
>処理上もループをなくしてあります。
>元ブックのフォルダは、アップ済みのもの同様、マクロブックと同じフォルダにしてあります。
>
>Sub Sample2()
>  Dim fPath As String
>  Dim ref As String
>  Dim shT As Worksheet
>  Dim r As Range
>  
>  fPath = ThisWorkbook.Path
>  ref = "='" & fPath & "\[元のブック.xlsx]該当のシート名'!"
>  Set shT = ThisWorkbook.Sheets("転記先のシート名")
>  shT.Cells.ClearContents   '転記前にクリア
>  shT.Range("A1:F1").Formula = ref & "A2"
>  shT.Range("A2:F2").Formula = ref & "A9"
>  shT.Range("A1:F2").Value = shT.Range("A1:F2").Value
>  
>  With shT.Range("A2:F2")
>    .Replace 0, Empty, xlWhole
>    On Error Resume Next
>    .SpecialCells(xlCellTypeBlanks).EntireColumn.Delete
>    On Error GoTo 0
>  End With
>  
>End Sub
・ツリー全体表示

【78000】Re:再び質問
発言  ichinose  - 16/2/28(日) 15:46 -

引用なし
パスワード
   ちょっと訂正です。

>
>標準モジュールに
>
>Sub mk_sample()
  With Range("a1:b10")
    .Columns(1).NumberFormatLocal = "yyyy/m/d"
    .Formula = Array("=datevalue(""2016/2/1"")+row()-1", "=char(64+row())")
    .Value = .Value
  End With
>End Sub
書式設定しないと 日付に見えませんでした

>
>
>上記のmk_sampleで作成したデータを日付で検索することを考えると・・・、
>
>
>Sub test()
>  MsgBox Application.VLookup("2016/2/5", Range("a1:b10").Value, 2, False)
>  MsgBox Evaluate("vlookup(datevalue(""2016/2/6""),a1:b10,2,false)")
>End Sub
>
>こんな方法があります。
・ツリー全体表示

【77999】Re:再び質問
発言  β  - 16/2/27(土) 19:59 -

引用なし
パスワード
   ▼勤怠システムを自作したい さん:

コード自体のアドバイスは ichinose さんにおまかせして。
やはり ??? です。

たとえば今日、2/27 に操作したとします。
で、コンボボックスで年月日を自由に指定できるということなので
2/24 を指定したとします。
きっと、2/24分の 出勤時刻や退勤時刻等を入力したいんでしょうね。

で、一方、リアルタイム時刻が表示されていますね。
その時刻が 10:00 だったとします。10:01 、10:02、・・と、どんどん変わっていっていますが
2/24の出勤時刻は 9:00 だったとします。
そうすると、操作する人は リアルタイムが 9:00 になるまで、ず〜〜っと、23時間ほど待つのでしょうか。
で、9:00になった、よし、入力 というところで、もたもたして 9:01 になった。
わぁ、だめだということで、また 24時間待つのですか?
・ツリー全体表示

【77998】Re:印刷が交互に出ます。
発言  γ  - 16/2/27(土) 6:25 -

引用なし
パスワード
   >日にち毎に順番にプリントアウトしたいのですが
>交互に出ます。
不思議ですね。
本当に交互に出るのですか?
たいていは順番で印刷されるが、
時々、順番に従わないケースがある、
といったことならありそうに思います。

それは、印刷命令実行は順序通り行われているが、
プリンター側の事情で順序が狂うことはありうるのかな、と思うからです。

少し時間がかかりますが、印刷命令実行のあとに遊びの時間をいれてみたら
どうでしょうか。

本当はAPIのSleepのほうがよいのですが、
Application.Waitで5秒程度待ちをいれてみてはどうですか?

ちなみに、コードはインデントしないという方針でも採っているんですか?
これが気にならないのは、よほどあなたの能力が高いのですね。
・ツリー全体表示

【77997】印刷が交互に出ます。
質問  room2  - 16/2/26(金) 8:58 -

引用なし
パスワード
   日報印刷を作りました。
日にち毎に順番にプリントアウトしたいのですが
交互に出ます。何処をどの様にすれば良いか教えてください。

Sub 日報印刷()
Dim firstday As Date
  firstday = InputBox("作成したい月の最終日を入力するんだお!", "1ヶ月分印刷しゅます", Date)
  Worksheets("a").Range("s1") = firstday


Dim N As Integer
Dim M As Integer
With Range("s1")
If IsDate(.Value) Then
M = Month(.Value)
Do
ActiveSheet.PrintOut Preview:=False ' False <--プレビューOn/Off
.Value = .Value - 1
Loop Until Month(.Value) <> M
MsgBox "印刷完了しました。", vbInformation
Else
MsgBox "日付が認識できません。", vbExclamation
End If
End With
End Sub
・ツリー全体表示

【77996】Re:couintifの高速化
発言  β  - 16/2/25(木) 16:52 -

引用なし
パスワード
   ▼ゆきみち さん:

これぐらいのデータであれば、どんなやり方でも固まるということはありえないですねぇ。
もちろん、【正しい】処理をすればという前提ですが。


>COUNTIF(k2:k2,K2)を最終行までドラッグして、

COUNTIF(K$2:K2,K2) じゃないですか?

動かしているコードをアップされてはいかがでしょうか?
・ツリー全体表示

【77995】couintifの高速化
質問  ゆきみち  - 16/2/25(木) 14:10 -

引用なし
パスワード
   初めまして。
ちょっと仕事で行き詰ってしまったのでこちらで質問させていただきます。

20行、18列のデータをエクセル2010で処理しております。
K列にID、Lに日付け、Mに時間データが入っており
K列のIDをキーにして、各IDごとに一番遅い時間を抽出したいと思っております。

考え付く方法として、まずこれらの列をデータの並べ替えで大きい降順にならべ
COUNTIF(k2:k2,K2)を最終行までドラッグして、その後にオートフィルタ、という方法に挑戦しようとしましたが、何度やっても途中で固まってしまいます。

記録のVBAにしてみましたが、やはり途中で固まってしまいました。
なにか、良い方法があれがご教示いただけると幸いです。

宜しくお願いします
・ツリー全体表示

【77994】Re:再び質問
発言  ichinose  - 16/2/25(木) 2:11 -

引用なし
パスワード
   一例です。

新規ブックにて

標準モジュールに

Sub mk_sample()
  With Range("a1:b10")
    .Formula = Array("=datevalue(""2016/2/1"")+row()-1", "=char(64+row())")
    .Value = .Value
  End With
End Sub


上記のmk_sampleで作成したデータを日付で検索することを考えると・・・、


Sub test()
  MsgBox Application.VLookup("2016/2/5", Range("a1:b10").Value, 2, False)
  MsgBox Evaluate("vlookup(datevalue(""2016/2/6""),a1:b10,2,false)")
End Sub

こんな方法があります。
・ツリー全体表示

【77993】Re:再び質問
質問  勤怠システムを自作したい  - 16/2/24(水) 11:53 -

引用なし
パスワード
   たくさんの返答を頂きありがとうございます。
やりたいことを分かりやすく伝えるというのは難しいことですね。

ユーザーフォームがないと説明しにくいのでフォームの画像を用意してみました。
://ur0.link/sfUQ

各種ボックスやラベルの配置がこのようになっており、目的は勤怠システムの構築です。
左上から順番に解説していくと、
日付→任意で変更できるが起動時に今の日付を自動取得
名前の選択→操作する人を取得
操作オプションの選択→打刻操作の制御
タイマー→今のリアルタイム時刻を表示しているだけ
実行ボタン→操作オプションに応じた操作を実行しそのデータを名前に一致したシートのセルに格納していく(例えばシート名でAさんというものがあり、Aさんが操作で出勤を選択し、実行を押した場合、日付ボックスに該当する日付をシートAさんから検出し、操作オプションに合わせたところに現在時刻を格納していきます。)
わかりにくいのでシートの配列も画像にしました→://ur0.link/sfXT

そして例としてC3、D3、E3、F3にデータが格納されていますが、今回質問しているのはこのデータを日付及び名前をフォーム上のコンボボックスで選択することで、シート上に該当するデータが有った場合はそのデータをlabel15,16,17,18(画像ではラベルをコピーしたので全部15になってますが)にそれぞれ表示するということですね。データがなければ空白が出力されます。
なので過去の日付が選択されていればその日のその人のデータをフォーム上に表示することが出来るようになります。

伝わりますでしょうか。
・ツリー全体表示

【77992】Re:再び質問
発言  β  - 16/2/24(水) 7:36 -

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

>日付の検索は 書式によって難しいことがありますから、
>書式のを確認しながら行ってみてください。
>

そうなんですよね。日付検索はフィルター関連も含めやっかいですね。
私の経験でいえば効率は悪いのでしょうけど、ワークシート関数のMATCHを使い
検索値にValue2を与えれば、検索できると思います。
・ツリー全体表示

【77991】Re:再び質問
発言  ichinose  - 16/2/24(水) 6:55 -

引用なし
パスワード
   ▼勤怠システムを自作したい さん:
>今回やらなければならないことはコンボボックスの内容に応じてユーザーフォームにあるラベルの表示内容を変えることなので、やはりvlookupが必要なのではないでしょうか。
私間違えてました。
名前で検索するのではないのですね!!
名前は、シートの特定ですね これでシート分け・・・、vbaを使うなら、
必要ないと思いますけどね!! VBAを使うなら、データベースの構造は簡単な方が良いと思います。


で、日付でその日のデータを検索するということですか?

日付の検索は 書式によって難しいことがありますから、
書式のを確認しながら行ってみてください。

もっともInitializeイベントうんぬんは、ここで何をしたいのかわかりませんが・・。

ひょっとして、既定Aさんの本日の日付だから、そのデータを
表示させたいということでしょうかね!!

だとしても、日付の書式の問題が影響しそうです。
・ツリー全体表示

【77990】Re:指定セル条件により別シートにコピー...
お礼  もょもと  - 16/2/23(火) 20:43 -

引用なし
パスワード
   回答は下記を参照願います。
エクセルの学校
[[20160214174530]] 『条件付き書式で塗潰したセルに入力値が無いと保存』


▼もょもと さん:
>[Sheet1]
>   A    B    C
>1 りんご  購入  100円
>2 みかん  交換  120円
>3 ばなな  購入  150円
>
>[Sheet2]
>   A    B    C
>1 なし   廃棄  130円
>2 ぶどう  返品  200円
>3 りんご  購入  100円
>4 ばなな  購入  150円
>
>Sheet1のB1に「購入」が選択され、必要箇所を
>入力(必要箇所はセルを変色し、変色したセルを
>全て入力しないと保存不可:別投稿で質問中)し、
>保存すると、Sheet1のA1、B1、C1のデータが
>同ファイル上のSheet2のデータが入力されて
>いない行に各々コピペされるようにしたいです。
・ツリー全体表示

【77989】Re:任意のセル値を消したら指定マクロ実...
お礼  もょもと  - 16/2/23(火) 20:43 -

引用なし
パスワード
   回答は下記を参照願います。
エクセルの学校
[[20160214174530]] 『条件付き書式で塗潰したセルに入力値が無いと保存』

▼もょもと さん:
>1)任意セルに値を入力するとロックさせたい。
>2)ロックした後に編集したい場合はボタンを押して
>別のイベントを起動してロック解除したい。
>3)ロック解除後は手動で上記2)とは別のボタンを押して
>イベントを起動し、再ロックしたい。
>
>1)〜3)の動作確認は出来ているのですが、
>3)の手動で再ロックするのを忘れてしまいがちなため
>2)でロック解除した後に任意のセル値を消した時点で
>3)が自動起動するようにしたいです。
>
>連続投稿して申し訳ございませんが、
>宜しくお願い致します。
・ツリー全体表示

【77988】Re:条件付き書式で塗潰したセルに入力値...
お礼  もょもと  - 16/2/23(火) 20:42 -

引用なし
パスワード
   回答は下記を参照願います。
エクセルの学校
[[20160214174530]] 『条件付き書式で塗潰したセルに入力値が無いと保存』

▼もょもと さん:
>申し訳ございません。
>どちらのサイトで質問したら良いか分からず、
>マルチポストとなってしまいました。
>引き続き宜しくお願い致します。
>
>▼β さん:
>>▼もょもと さん:
>>
>>質問箱IVは、マルチポストを許容しています。
>>また、エクセルの学校もマルチポストを容認しています。
>>
>>しかしながら、それぞれの掲示板で、マルチポストに関するルールというか扱い方が明記されていますので
>>目を通しておいてください。質問箱IVでは、上部の
>>
>>【本サイトの基本方針をまとめました。こちら をご一読ください。】の「こちら」をクリックするとでてきますし
>>エクセルの学校も 【初めての方へ】-->【初めての方へ(詳細版)】をクリックするとでてきます。
>>
>>それらを読んだうえで、それぞれの掲示板に定められている適切な措置をとってくださいね。
・ツリー全体表示

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