Excel VBA質問箱 IV

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

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


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

【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で変換すると、
参照している範囲の名称やシートの名前まで変換されてエラーとなってしまい
困っています。
・ツリー全体表示

【79827】セル入力の半角
質問  りか  - 18/4/24(火) 11:39 -

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

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

上司かシートに記入してある文字をすべて半角にできるものは
半角にしろと言われていて、置換ではやってられないので、
マクロに一気に処理したいのです。
・ツリー全体表示

【79826】Re:フォーマットを別シートからのデータ...
質問  そら  - 18/4/23(月) 16:01 -

引用なし
パスワード
   みなさま、色々とアドバイスいただきありがとうございます。。
自分で少し考えてみましたので、質問内容を変えてもよいでしょうか?

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など)

何度も申し訳ありませんが、どうぞよろしくお願いいたします。
・ツリー全体表示

【79825】Re:フォーマットを別シートからのデータ...
お礼  そら  - 18/4/23(月) 15:51 -

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

ありがとうございます!
シートのフォーマットは、ちょっと複雑になっていて、
説明が難しいため、もし可能でしたら質問内容を変えますので、
そちらを確認いただいてもよいでしょうか・・?
申し訳ございません!


>▼そら さん:
>
>>項目が入った入力用フォーマットがあり、
>>フォーマットの一部分だけ入力されているシートが複数あります。
>>
>>一部だけ入力されたシートそれぞれから
>>統合用のフォーマットシート(入力欄はすべて空)を埋めていき、
>>すべての入力欄欄が埋まったシートを作成したい。
>
>シートのレイアウトを具体的に説明していただけますか。
>どんなフォーマットなのか全くイメージできません。
・ツリー全体表示

【79824】Re:フォーマットを別シートからのデータ...
お礼  そら  - 18/4/23(月) 15:31 -

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

ありがとうございます・・!
ただ私が初心者すぎて、上手く説明ができておらず申し訳ございません。。
数日間、再度自分で考えてみましたので、
再度、別途質問してもよいでしょうか・・?
もしよろしければアドバイスいただけますと幸いです。


>途中まで、
>
>Dim Shtb As Variant, sh As Worksheet,tt As Variant
>Shtb = Array("1111", "2222", "3333")
>On Error Resume Next
>For Each tt In Shtb
>  Set sh = Sheets(tt)
>  If Err Then
>    MsgBox tt & "が無い"
>  Else
>    If sh.Range("A1").Value = "" Then
>     MsgBox "シート" & tt & "のA1が空白の時の処理"
>    Else
>     MsgBox "シート" & tt & "のA1が空白で無い時の処理"
>    End If
>  End If
>  Err.Clear
>Next
>On Error GoTo 0
・ツリー全体表示

【79823】Re:フォーマットを別シートからのデータ...
発言  BJ  - 18/4/22(日) 23:02 -

引用なし
パスワード
   途中まで、

Dim Shtb As Variant, sh As Worksheet,tt As Variant
Shtb = Array("1111", "2222", "3333")
On Error Resume Next
For Each tt In Shtb
  Set sh = Sheets(tt)
  If Err Then
    MsgBox tt & "が無い"
  Else
    If sh.Range("A1").Value = "" Then
     MsgBox "シート" & tt & "のA1が空白の時の処理"
    Else
     MsgBox "シート" & tt & "のA1が空白で無い時の処理"
    End If
  End If
  Err.Clear
Next
On Error GoTo 0
・ツリー全体表示

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