Excel VBA質問箱 IV

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

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


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

【79947】Re:特定の文字列(6種)の最大値
回答  γ  - 18/6/4(月) 0:21 -

引用なし
パスワード
   参考になりますか。

Sub testA()
  Dim rng As Range
  Dim constAreas As Areas
  Dim blankAreas As Areas
  Dim r As Range
  Dim k As Long
  
  Set rng = Range("C1:C15")  'end等を使って調整のこと
  Set constAreas = rng.SpecialCells(xlCellTypeConstants).Areas
  Set blankAreas = rng.SpecialCells(xlCellTypeBlanks).Areas
  
  For Each r In constAreas
    k = k + 1
    blankAreas(k).Value = WorksheetFunction.Max(r)
  Next
  
End Sub
・ツリー全体表示

【79946】特定の文字列(6種)の最大値
質問  chou  - 18/6/3(日) 23:49 -

引用なし
パスワード
   あるリストを指定のフォーマットに変換するマクロを組んでいます。
その中で、ある文字列と同じ文字列に入っている最大値を探し出し、
その文字列に紐付くコードを転記する作業をするのに、どのようにしたら良いか、
ご教示いただけますでしょうか。

リストは下記の通りです。
  A   B  C  D
01 1回目 あ 123 100 
02 1回目 い 456 200
03 1回目 う 789 300
04 1回目 A 
05 2回目 あ 123 100
06 2回目 A 
07 3回目 い 456 100
08 3回目 う 789 500
09 3回目 え 098 300
10 3回目 え 098 200
11 3回目 い 456 400
12 3回目 A 
13 本番  あ 123 100
14 本番  い 456 200
15 本番  A   

結果は、
04行目のC列に「789」
06行目のC列に「123」
12行目のC列に「456」
15行目のC列に「456」が入るようにしたいです。

B列にある同じ文字列のなかから、
D列にある数値の合計が一番大きくなるC列のコードを、
B列にある「A」という文字列が入っている行のC列に入力します。

どうしていいかわからないのは、
最大値を探すセル範囲の指定方法です。
宜しくお願いします。
・ツリー全体表示

【79945】Re:画像付データベース
お礼  そば  - 18/5/31(木) 22:50 -

引用なし
パスワード
   ▼亀マスター さん:


ご回答ありがとうございます!
亀マスターさんがアドバイスしてくれたような機能が実装できれば、
わたしの希望しているような動きになりそうです。

しかし今の自分には、なかなかレベルが高そうです。
でももう少し自分で努力してみようと思います。

そこでまたつまづいたら質問させてください。
よろしくお願いします。
・ツリー全体表示

【79944】Re:Sendkeysで制御文字と全角文字が送れ...
回答  亀マスター  - 18/5/31(木) 18:57 -

引用なし
パスワード
   貼り付けができませんか…。
ショートカットキーでの貼り付け以外でだと、右クリックメニューからの貼り付けなどどうでしょうか。
右クリックメニューはShift+F10で出せますので、これを送った後、括弧書きで書かれている貼り付けに対応するキーを押すということで。
例えば、メモ帳だと右クリックすると「貼り付け(P)」と表示されるかと思いますが、この「P」を入力することで貼り付けができます。それをSendKeysで再現しようというわけです。
対象のアプリケーションで入力中に右クリックをしてみて、どのキーが貼り付けに対応しているかを確認してみてください。

Tabに関してはちょっと対応方法が思いつかないですが、Tabの前に他のキーを連続して押していませんか?SendKeysは連続で使うとアプリケーション側が反応する前に次のキーを送信してしまうことがあるので、試しにひとつのキーを送信する度にSleepか何かで時間を空けてみてはどうでしょう。

あと、VBAのSendKeysではなく、ShellスクリプトのSendKeysも試してみてはどうでしょうか。VBAではうまくいかなくても、Shellならうまくいくということもあるようです。ShellのSendKeysは
With CreateObject("Wscript.Shell")
  .SendKeys "A"
End With
のような感じで使えます。
・ツリー全体表示

【79943】Re:セルにある日付をファイル名に反映
回答  よろずや  - 18/5/30(水) 23:29 -

引用なし
パスワード
   ▼いち さん:
>▼よろずや さん:
>>▼いち さん:
>>>色々調べては見たものの、見当がつかず手付かずです・・・
>>ファイル名の変更は保存するときにしか出来ないということは理解しておられますか?
>>
>>1. セルから月を取り出す。
>>2. 自ブックのファイル名を取り出す。
>>3. 1.と2.を結合する。
>>4. ファイル名を変更して保存する。
>>
>>4.は出来ますか?
>
>はい。大丈夫です。
じゃぁ、手付かずと言うほどでもないですね。
そこに、追加していきましょう。
myMonth = Format(Range("A1").Value, "mm")
myPath = ThisWorkbook.Path
myName = ThisWorkbook.Name
ここまで出来たら見せてください。

>ちなみにファイル名を変更しつつ上書き保存というのは出来ますでしょうか?
別名で保存すれば別ファイルになります。
・ツリー全体表示

【79942】Re:Sendkeysで制御文字と全角文字が送れ...
お礼  山田  - 18/5/30(水) 23:11 -

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

メモ帳には貼り付けできています。
アプリケーションに貼り付けのショートカットキーがあるかどうかはわかっていません。
ないかもしれません。


複数のテキストボックスがあり、1つに入力を終えるとTABキーを押して次のテキストボックスに移って入力をしています。
それと同じことしたくて、TABキーを送ろうとしています。


言葉がたらずすいません。
・ツリー全体表示

【79941】Re:Excelで家計簿制作中
発言  マナ  - 18/5/30(水) 19:06 -

引用なし
パスワード
   ▼家計簿Excel さん:


最初にピボットを作成したときの
元データに新しいデータを追加すれば
ピボットにその結果が反映させられます。

例えば、こんな感じで

  Dim データWS As Worksheet
  Dim ピボットWS As Worksheet
  Dim 追加行 As Long
  
  Set データWS = Worksheets("Sheet1")
  Set ピボットWS = Worksheets("Sheet2")
  
  追加行 = データWS.Cells(1).End(xlDown).Row + 1
  
  データWS.Cells(追加行, 1).Value = txt購入日.Text
  データWS.Cells(追加行, 2).Value = txt金額.Text
  
  ピボットWS.PivotTables(1).SourceData = _
    データWS.Cells(1).CurrentRegion.Address(, , xlR1C1, True)



・ツリー全体表示

【79940】Re:セルにある日付をファイル名に反映
質問  いち  - 18/5/30(水) 17:24 -

引用なし
パスワード
   ▼よろずや さん:
>▼いち さん:
>>色々調べては見たものの、見当がつかず手付かずです・・・
>ファイル名の変更は保存するときにしか出来ないということは理解しておられますか?
>
>1. セルから月を取り出す。
>2. 自ブックのファイル名を取り出す。
>3. 1.と2.を結合する。
>4. ファイル名を変更して保存する。
>
>4.は出来ますか?

はい。大丈夫です。
ちなみにファイル名を変更しつつ上書き保存というのは出来ますでしょうか?
・ツリー全体表示

【79939】Re:セルにある日付をファイル名に反映
発言  よろずや  - 18/5/30(水) 15:59 -

引用なし
パスワード
   ▼いち さん:
>色々調べては見たものの、見当がつかず手付かずです・・・
ファイル名の変更は保存するときにしか出来ないということは理解しておられますか?

1. セルから月を取り出す。
2. 自ブックのファイル名を取り出す。
3. 1.と2.を結合する。
4. ファイル名を変更して保存する。

4.は出来ますか?
・ツリー全体表示

【79938】Re:セルにある日付をファイル名に反映
回答  いち  - 18/5/30(水) 13:01 -

引用なし
パスワード
   ▼よろずや さん:
>▼いち さん:
>>A1に日付が入ったセルがありまして
>>その日付の月をファイル名の先頭に付けることは可能でしょうか?
>
>ご自分では、どこまでやってみましたか?

色々調べては見たものの、見当がつかず手付かずです・・・
・ツリー全体表示

【79937】Re:セルにある日付をファイル名に反映
発言  よろずや  - 18/5/30(水) 12:29 -

引用なし
パスワード
   ▼いち さん:
>A1に日付が入ったセルがありまして
>その日付の月をファイル名の先頭に付けることは可能でしょうか?

ご自分では、どこまでやってみましたか?
・ツリー全体表示

【79936】Re:Excelで家計簿制作中
お礼  家計簿Excel  - 18/5/30(水) 11:40 -

引用なし
パスワード
   すみません。

ピポットテーブルに書き込み出来ないのに項目欄の次の行にどう書き込むべきなのか
僕では理解できませんでした。


諦めることにします。
・ツリー全体表示

【79935】セルにある日付をファイル名に反映
質問  いち  - 18/5/30(水) 9:42 -

引用なし
パスワード
   A1に日付が入ったセルがありまして
その日付の月をファイル名の先頭に付けることは可能でしょうか?

例としては
A1に"2018/06/05"とあった場合に
マクロを実行すると
ファイル名の頭に"06-"と付くようにする

どなたかお分かりになる方がいましたらご教授いただければと思います。

以上、宜しくお願い致します。
・ツリー全体表示

【79934】Re:Sendkeysで制御文字と全角文字が送れ...
回答  亀マスター  - 18/5/29(火) 22:40 -

引用なし
パスワード
   うーむ、難しいですね。

Ctrl+Vでの貼り付けができないとありましたが、対象とアプリケーションでは貼り付けのショートカットキーはないのでしょうか。あるなら、それをSendKeysで試してみてください。
あと、貼り付けがうまくいかなかったコードを実行した直後、メモ帳などでCtrl+Vを普通にキーボードから入力した場合、きちんと指定した文字列を貼り付けることはできるでしょうか。

Tabキーで次のコントロールに移るアプリケーションなのにSendKeysの{TAB}でうまくいかないというのは…何なんでしょうね。一応確認ですが、プログラム実行時に対象のアプリケーションはアクティブになってますよね?

そもそもの目的である、制御文字としてのTabを送るのであれば、vbTabなどの定数を送ればいいと思います。ただ、クリップボードからの貼り付けができるというのが前提ですが…。
もしくは、アプリケーションによってはShft+TabやCtrl+Tabで制御文字としてのTabを入力できることもありますので、確認してみてください。
・ツリー全体表示

【79933】Re:Sendkeysで制御文字と全角文字が送れ...
お礼  山田  - 18/5/29(火) 21:48 -

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

クリップボードから貼り付けようとしましたが、失敗しました。
Ctrl+vで貼り付けができないアプリケーションのようです。

Tabキーは押すと次のコントロールに移るアプリケーションです。
次の項目へフォーカスを移そうとして"{TAB}"を送りました。
しかし、そのままでした。
・ツリー全体表示

【79932】Re:Excelで家計簿制作中
発言  マナ  - 18/5/29(火) 19:04 -

引用なし
パスワード
   ▼家計簿Excel さん:

>・領収書をExcelにまとめるために一覧表を作成した
>・ピポットテーブルを使い見やすく、検索(フィルター)機能を使えるようにしたい
>・いちいち欄に記入するのではなく、ユーザーフォームを使って記入したい


ここまでは理解できます。

>それとも一覧表にマクロを使わずに最初からピポットテーブル機能を使っているのが間違っているのでしょうか?

ここの意味がわかりませんが、たぶん間違っています。
マクロで、一覧表にデータ追加し、その後、続けてピボット更新です。
ピボットに直接データを転記するものではありません。(できません)

↓のような感じにするとよいです。

Private Sub btnOk_Click()
    一覧の最下行にデータを追加
    ピボットテーブルの更新    
End Sub
・ツリー全体表示

【79931】Re:Excelで家計簿制作中
質問  家計簿Excel  - 18/5/29(火) 11:54 -

引用なし
パスワード
   わかりにくい質問で申し訳ありません。

・領収書をExcelにまとめるために一覧表を作成した
・ピポットテーブルを使い見やすく、検索(フィルター)機能を使えるようにしたい
・いちいち欄に記入するのではなく、ユーザーフォームを使って記入したい

一覧表を作成し項目を7項目(日付や金額)作りピポットテーブル機能を追加し
ユーザーフォームを作成した。
ところがユーザーフォームにあるボタンクリックによる書き込みをしたところ
ピポットテーブル枠の外からの書き込みを始めた。

これはあくまで説明用の例なのですが
A1にタイトル
B2〜H2に項目
B3:H3〜B10:H10までをピポットテーブルだとすると
B11:H11から書き始めます。
本当はB3:H3から順に上から埋めていってほしいのですが・・・

おそらく、ピポットテーブルの使い方or書き込みボタンのコードが違っているからうまく上から順に書き込んでくれないのだと思うのですが・・・

書き込みボタンのコードは


Private Sub btnOk_Click()
 Dim lastRow As Long
    With Worksheets("一覧")
    lastRow = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
    .Cells(lastRow, 2) = Me.txt購入日.Text
  End With
End Sub

のように記載しました。

空白の探し方を間違っているのでしょうか・・・
それとも一覧表にマクロを使わずに最初からピポットテーブル機能を使っているのが間違っているのでしょうか?

ご教授下さい。
・ツリー全体表示

【79930】Re:画像付データベース
回答  亀マスター  - 18/5/28(月) 23:02 -

引用なし
パスワード
   横から失礼します。

WindowオブジェクトのRangeFromPointメソッドを使えばカーソル位置にあるセルをRangeオブジェクトとして取得できるので、これとAPI関数のGetCursorPosを使えばやりたいことに近いものができるかもしれません。

画像自体は直接貼り付けず、画像へのリンクをセルの値なりコメントなりに入れておいて、そのセルの上にマウスカーソルが移動したら、リンクの情報を元に画像表示用のセルかユーザーフォームにでも画像を表示するということで。

流れとしては以下のような感じでしょうか。

Do

  マウスカーソル位置取得
  カーソル位置のセルを取得
  取得したセルの値を取得
  セルの値を元に画像を表示

Loop

実際にはループを抜けるための処理やリンク先が指定されていないセルの上にカーソルがある場合の処理、その他エラートラップなどが必要になるとは思いますが。
あと、いちいちカーソルを動かす度に画像を読み込む必要があるので、処理が遅くなるかもしれません。

それぞれの処理の方法は、ググるなり追加で質問するなり。
・ツリー全体表示

【79929】Re:画像付データベース
お礼  そば  - 18/5/28(月) 21:11 -

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

アドバイスありがとうございます。
もうすこし自分で努力してみようと思います。

ファイルを開く段階で重いってのは
コメントに画像を貼り付けるって
発想を変えないといけなさそうですね。
がんばってみます。
・ツリー全体表示

【79928】Re:Excelで家計簿制作中
発言  マナ  - 18/5/28(月) 18:46 -

引用なし
パスワード
   ▼家計簿Excel さん:

>ピポットテーブルの枠の外からしか書き込まなくなりました。
>
>何かいい方法はありませんか??
>それともピポットテーブルは諦めるべきでしょうか・・・

何をしようとしているか理解できていませんが、

1)ピボットテーブルの元になる表にデータを追加
2)その後、ピボットテーブルの更新

というマクロではないのでしょうか。
・ツリー全体表示

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