Excel VBA質問箱 IV

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

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


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

【79847】Re:複数条件での最大日付取得
お礼  tsujio  - 18/4/29(日) 8:44 -

引用なし
パスワード
   ▼マナ さん:
>▼tsujio さん:
>
>>ステータス列は75列×顧客数400ですので
>
>こんな感じでできませんか
>
>=IF(C2="","",INDEX($C$1:$BY$1,1,COUNT(C2:BY2)))


引き続きありがとうございます。
さきほど【79840】でご教示いただいた方法をマクロに置き換え思ったとおりの結果を得ることができました。

ありがとうございます。


>関数は得意ではないので、もっとよい案があるかもしれません。
>一般操作の掲示板で質問したほうがよかったと思います。

関数でシンプルに処理できる場合とVBAのほうが効率的な場合の切り分けがまだよくわかっていないですね。

もう少し勉強します。

ありがとうございました。
・ツリー全体表示

【79846】Re:複数条件での最大日付取得
発言  マナ  - 18/4/29(日) 7:48 -

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

>ステータス列は75列×顧客数400ですので

こんな感じでできませんか

=IF(C2="","",INDEX($C$1:$BY$1,1,COUNT(C2:BY2)))

関数は得意ではないので、もっとよい案があるかもしれません。
一般操作の掲示板で質問したほうがよかったと思います。
・ツリー全体表示

【79845】Re:複数条件での最大日付取得
お礼  tsujio  - 18/4/29(日) 6:13 -

引用なし
パスワード
   ▼マナ さん:
>▼tsujio さん:
>
>これでよかったです。
>
>=IF(C2="","",IF(D2="",$C$1,IF(E2="",$D$1,$E$1)))

ありがとうございます。

なるほどそう考えれば良かったですね。
ややこしくしていました。

ステータス列は75列×顧客数400ですので、頂いたロジックをループで回します。

助かりました。

ありがとうございました。
・ツリー全体表示

【79844】Re:Excel VBAによるpowerpointの操作につ...
発言  亀マスター  - 18/4/29(日) 1:25 -

引用なし
パスワード
   >ファイルの問題とのことですがPowerPointのファイルのことでしょうか。

PowerPointのファイルに問題があるのではないか・・・と思います。

原因についてはなんとも言えませんが、
以下のようなところからチェックしてみてはどうでしょうか。

・問題のPowerPointファイルを普通にPowerPointで開くことはできるか
・エクセル経由ではなく直接PowerPointのVBAから同じ操作をしても問題は発生するか
・別のPowerPointファイルではエラーが発生するか
・1ページ目以外のスライドを対象に同じことをするとエラーは発生するか
・ツリー全体表示

【79843】Re:Excel VBAによるpowerpointの操作につ...
質問  ぼう  - 18/4/28(土) 23:10 -

引用なし
パスワード
   早いご返答ありがとうございます!
失礼ながら質問で返させていただきます。
ファイルの問題とのことですがPowerPointのファイルのことでしょうか。
一応PowerPoint側もエクセル側も、いじれるところはいじったつもりですが、結局解決しませんでした。
どのような問題が可能性として考えられますでしょうか…?
・ツリー全体表示

【79842】Re:Excel VBAによるpowerpointの操作につ...
発言  亀マスター  - 18/4/28(土) 22:06 -

引用なし
パスワード
   あまりPowerPointのVBAには詳しくありませんが、構文は間違っていないように思います。
手元で適当なPowerPointのファイルを開いてみたところ、普通にページ番号を表示できました。
開こうとしているファイルに問題があるのではないでしょうか?
・ツリー全体表示

【79841】Excel VBAによるpowerpointの操作について
質問  ぼう  - 18/4/28(土) 20:11 -

引用なし
パスワード
   次のように、Excel VBAでPowerPointを開き、スライド番号を取得し表示するためのコードを書いたのですが、10行目のset ppSldのところで必ず「問題が発生したため〜〜」というダイアログとともにエクセルを閉じられてしまいます。何が原因なのでしょうか。
ちなみに、その行を別のスライド番号を使う系の文(MsgBox ppPrs.Slides(1).SlideNumberなど)にしても同じことが起こるので、ppPrs.Slides()が何がいけないのかなという気はしています。

Sub aaa()

Dim ppApp As New PowerPoint.Application
ppApp.Visible = True

Dim ppPrs As PowerPoint.Presentation
Set ppPrs = ppApp.Presentations.Open(ThisWorkbook.Path & "/sample.pptx")

Dim ppSld As PowerPoint.Slide 'スライドオブジェクト
Set ppSld = ppPrs.Slides(1) '1ページ目のスライドをセット

MsgBox "スライド1のページ数:" & ppSld.SlideNumber 'スライド1のスライド番号

ppApp.Quit
Set ppApp = Nothing

End Sub
・ツリー全体表示

【79840】Re:複数条件での最大日付取得
発言  マナ  - 18/4/28(土) 12:36 -

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

これでよかったです。

=IF(C2="","",IF(D2="",$C$1,IF(E2="",$D$1,$E$1)))
・ツリー全体表示

【79839】Re:フォーマットを別シートからのデータ...
発言  マナ  - 18/4/28(土) 9:18 -

引用なし
パスワード
   ▼そら さん:
>こちら、皆様ありがとうございました。
>また質問しなおしたいと思います。
>初心者のため、質問の仕方も悪く申し訳ありませんでした。

BJさんの 18/4/22(日) 23:02 の回答は参考になりませんでしたか?
・ツリー全体表示

【79838】Re:複数条件での最大日付取得
発言  マナ  - 18/4/28(土) 9:10 -

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

>もちろんマクロでも関数でも意図通りに表示できれば何でもいいです。

=IF(C2<>"",CHOOSE(COUNT(C2:E2),$C$1,$D$1,$E$1),"")
・ツリー全体表示

【79837】中国語(簡体語)を含むファイル名の取得
質問  とらこ  - 18/4/27(金) 17:30 -

引用なし
パスワード
   お世話になります。文字列操作に関する質問です。
ご教授よろしくお願いいたします<(_ _:)>

[やりたいこと]
社員から授受したファイル名の一覧を生成する。
(指定されたフォルダ配下の全ファイルパスを取得し、自ブックのシートに
ファイル名一覧を出力する)

[エラー]
人名を含んだファイル名のため、中国人社員のファイル名を取得する際、
ファイル名の一部が「?」となり、文字化けしてしまいます。

[現状]
文字コードがVBAの仕様に対応していない事まで調査し、理解しましたが、
対応策まで見つけれませんでした。
・ツリー全体表示

【79836】Re:フォーマットを別シートからのデータ...
お礼  そら  - 18/4/27(金) 11:14 -

引用なし
パスワード
   こちら、皆様ありがとうございました。
また質問しなおしたいと思います。
初心者のため、質問の仕方も悪く申し訳ありませんでした。


▼そら さん:
>みなさま、色々とアドバイスいただきありがとうございます。。
>自分で少し考えてみましたので、質問内容を変えてもよいでしょうか?
>
>If Worksheets("まとめシート").Range("C3") = "" Then
>Worksheets("まとめシート").Range("C3") = Worksheets("xxxxx").Range("C3")
>
>上記の処理を以下のような形に持っていきたのですが、
>どのような形にしたらよいのでしょうか?
>
>1.Worksheets("xxxxx")の部分は、毎回シート名が違うため、
> Worksheets("まとめシート")の右隣のシートを参照するようにしたいです。
>
>2.上記はC3の処理ですが、上記と同じようにまとめシートの方が空欄の場合、
> 右隣のシートの同じセルのデータを貼り付ける、という処理を
> 指定した範囲内で繰り返したいです。
> (C3:F1000と、I6:M1000、O4:R1000)
>
>3.上記範囲内は、一部セルの結合がされているのですが、
> 上手く貼り付けできるようにしたいです。
> (例:C3:C18、O4:Q10など)
>
>何度も申し訳ありませんが、どうぞよろしくお願いいたします。
・ツリー全体表示

【79835】Re:複数条件での最大日付取得
発言  tsujio  - 18/4/27(金) 7:01 -

引用なし
パスワード
   ▼マナ さん:
>▼tsujio さん:
>
>>ステータスは列番号1→2→3の順に進んでいきます。
>
>ということならば
>
>Worksheetfunction.Count
>ではだめでしょうか。
>
>というか、マクロを使う必要があるのでしょうか。


返信有難うございます。

頂いた回答と自分の質問を見直してみたところ、質問自体が正確ではありませんでした。


正確には
---------------------------------
列番号  1    2     3
行番号    
 1   受注 商品送付 入金確認
 2   4/10  4/10   4/11
---------------------------------

は略しすぎで、正しくは

----------------------------------------------------
列番号 1      2      3   4    5
行番号    
 1  客名  最新ステータス 受注 商品送付 入金確認
 2  お客A   入金確認   4/10  4/11   4/11
----------------------------------------------------

の場合に最新ステータスの文言として(この場合は「入金確認」)を取得したい、でした。

この「お客A」と同様の行が400行ほどあります。

現在は

1.まずMAXで日付の最大値を取得→上記では4/11

2.その後4/11が入力されているセルの列番号を取得し→上記では「5」(を取得したい)

3.cells(2,2)の最新ステータス表示セルにはcells(1,5)の「入金確認」が表示される

としてます。

だいたいの行は意図通りに表示されるのですが、たまに「入金確認」ではなく
「商品送付」が最新ステータス表示セルに表示されてしまいます。

そうなると「最新ステータス列」でフィルターをかけたときに不正確な情報で絞り込まれてしまい、これをなんとかしたいのです。

で、

「同じ日付でも列番号の大きい方(ステータスが進んでいる方)を取得できないか」

と考えました。

調べてみるとdmaxが複数条件(日付が最大かつ列番号が最大)指定できそうでしたがうまくできませんでした。

もちろんマクロでも関数でも意図通りに表示できれば何でもいいです。

ヒントでも結構ですのできっかけを頂けると助かります。
・ツリー全体表示

【79834】Re:複数条件での最大日付取得
発言  マナ  - 18/4/26(木) 19:07 -

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

>ステータスは列番号1→2→3の順に進んでいきます。

ということならば

Worksheetfunction.Count
ではだめでしょうか。

というか、マクロを使う必要があるのでしょうか。
・ツリー全体表示

【79833】複数条件での最大日付取得
質問  tsujio  - 18/4/26(木) 7:14 -

引用なし
パスワード
   お世話になります。

以下のデータが入力された行が400行ほどあります。

---------------------------------
列番号  1    2     3
行番号    
 1   受注 商品送付 入金確認
 2   4/10  4/10   4/11
---------------------------------

ステータスは列番号1→2→3の順に進んでいきます。

上記表の場合、「最新ステータス」表示セルに「商品送付」と返したいのですが、
同じ日付が入力されていると行によっては「受注」が返されてしまいます。

現在、

WorksheetFunction.Max

を使用し、対象範囲には日付が入力されている2行目を指定しています。

これを複数条件、

「同じ日付があれば列番号の大きい方を返す(上記の図だと「商品送付」)」

としたいのですが、dmaxでいけるのでしょうか。

試してみましたがうまくいきませんでした。

「2行目の中で最大、かつ列番号が大きいほう」の値を取得するにはどういう書き方があるのでしょうか。

よろしくお願いいたします。


※1行目の「受注」「商品送付」「入金確認」にはEnumでそれぞれ「1」「2」「3」を割り当てています。
・ツリー全体表示

【79832】Re:セルの関数で使用している文字列を半...
回答  亀マスター  - 18/4/24(火) 20:50 -

引用なし
パスワード
   マナさんのおっしゃるように、エラーの可能性はあります。
特に、If関数などは条件が崩れると思いますよ。

それでもというなら、私なら以下のようにします。
(もっといい方法もあるかもしれませんが)

関数の中で文字列はダブルクォーテーションで囲んでいるはずなので、
これをVBAのInStrで検出し、2つのダブルクォーテーションで囲まれた
範囲だけを対象にStrConvで変換する・・・という考え方です。
これなら、参照しているシート名などはそのまま残ると思います。

Sub test()

Dim Rng As Range
Dim Pos1 As Long, Pos2 As Long
Dim tempStr As String, halfStr As String

For Each Rng In Selection
  '式があるかどうかを確認
  If Rng.HasFormula Then
    tempStr = Rng.FormulaLocal
    Pos2 = 0
    Do
      'ダブルクォーテーションの位置を検索
      Pos1 = InStr(Pos2 + 1, tempStr, """")
      '見つからなければループを抜ける
      If Pos1 = 0 Then
        Exit Do
      End If
      '次のダブルクォーテーションの位置を検索
      Pos2 = InStr(Pos1 + 1, tempStr, """")
      'ダブルクォーテーションで挟まれた文字列を抜き出し、半角に変換
      halfStr = StrConv(Mid(tempStr, Pos1 + 1, Pos2 - Pos1 - 1), vbNarrow)
      '変換後の文字列を元の位置に差し込む
      tempStr = Mid(tempStr, 1, Pos1) & halfStr & Mid(tempStr, Pos2)
    Loop  '次の位置のダブルクォーテーションが見つからなくなるまでループ
    '最終的に得られた数式を元のセルに戻す
    Rng.FormulaLocal = tempStr
  End If
Next Rng

End Sub
・ツリー全体表示

【79831】Re:セルの関数で使用している文字列を半...
発言  マナ  - 18/4/24(火) 18:57 -

引用なし
パスワード
   ▼りか さん:
>セルに
>=関数("文字列",シート1!A1)
>のように関数があるシートがあります。
>(関数、文字列と参照先はセルによってバラバラです)
>
>この関数の文字列の部分だけを半角(英数字とカナ)にし、
>セル参照のシート名はそのままにすることはできませんでしようか?
>

半角にした結果、そのセルを計算に使っているセルの結果が変わる
あるいは、えらーになるといった心配はありませんか。
・ツリー全体表示

【79830】Re:行番号の範囲の入った配列を使ってfi...
発言  マナ  - 18/4/24(火) 18:39 -

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

>複数条件でAND検索

具体例を挙げていただけますか
・ツリー全体表示

【79829】行番号の範囲の入った配列を使ってfindで...
質問  n  - 18/4/24(火) 17:39 -

引用なし
パスワード
   複数条件でAND検索(かつ大文字小文字区別)しようとしていて
その過程で、
検索で取得した行の範囲をRangeなどでまとめて
.findでまた検索かけるということをしたいです。

下記だとうまくいかないです。
どうすればいいでしょうか。。

For a = 0 To UBound(Dic) - 2
Set t = t & 接点.Cells(Dic(a), "B") & ","
Next a
Union(t).Select
・ツリー全体表示

【79828】セルの関数で使用している文字列を半角に...
質問  りか  - 18/4/24(火) 11:52 -

引用なし
パスワード
   セルに
=関数("文字列",シート1!A1)
のように関数があるシートがあります。
(関数、文字列と参照先はセルによってバラバラです)

この関数の文字列の部分だけを半角(英数字とカナ)にし、
セル参照のシート名はそのままにすることはできませんでしようか?

上司かシートに記入してある文字をすべて半角にできるものは
半角にしろと言われていて、置換ではやってられないので、
マクロに一気に処理したいのです。
直接文字が入力してあるだけのセルはValueをStrConvで変換すればよいのですが、
関数のセルのFormulaLocalをStrConvで変換すると、
参照している範囲の名称やシートの名前まで変換されてエラーとなってしまい
困っています。
・ツリー全体表示

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