Excel VBA質問箱 IV

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

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


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

【77539】Re:コメントサイズの自動調整エラー
回答  ウッシ  - 15/10/20(火) 11:03 -

引用なし
パスワード
   こんにちは

'コメント欄のサイズを自動調整します。ここでエラー発生(2回めのみ)。
xlRange.Comment.Shape.TextFrame.AutoSize = True

の前に、Application.GoTo xlRange, True
と入れて実行して、該当のセルがアクティブになるか確認して下さい。
・ツリー全体表示

【77538】Re:コメントサイズの自動調整エラー
発言  くまさん  - 15/10/20(火) 10:40 -

引用なし
パスワード
   ▼ウッシ さん:
独学初心者の読みづらいVBAに付き合って頂きありがとうございます。

記入頂いた箇所を確認いたしましたが、やはりobjyには製品コードがセットされていました。1つ目のファイルに書き込む際も、2つ目のファイルに書き込む際もセットできています。


>こんにちは
>
>最初の質問で「item(i).Row」となっていたのでセルをSetしているのだろうと
>想像は付きましたけど、こちらでもエラーは再現出来ませんでした。
>
>Set objy = xlSheet.Cells.Find(What:=item(i), SearchOrder:=xlByColumns)
>
>で検索結果が無いのでは?
・ツリー全体表示

【77537】Re:コメントサイズの自動調整エラー
発言  くまさん  - 15/10/20(火) 10:34 -

引用なし
パスワード
   ▼β さん:
コメントありがとうございます。前の書き込みの分と合わせて回答させていただきます。
item()にはセルを代入しています。そのセルの位置を利用して売上詳細から出荷数量を出しています。
Sub WComment内の下記箇所。ただし、あとになってみれば、わざわざObjectにする必要はなかったかもしれません。
xlRange.Value = .Range("F" & item(i).Row).Value + xlRange.Value
ComTxt = .Range("B5") & " " & .Range("D5") & " " & .Range("F" & item(i).Row).Value & "PC"

xlRangeには出荷数量を書き込むセル、B5、D5には製品の納入日と客先名が入っています。
手探りで記述しているため、おかしいコードの書き方をしているかもしれません。


>▼くまさん さん:
>
>ついでに申し上げますと、item() の正体がわからなかったので
>Sub WComment(xlSheet As Worksheet, WMon As Long, WItem As Long)
>と変更し、プロシジャ内で、item と i を 参照しているコードも
>
>xlRange = xlRange.Value
>ComTxt = .Range("B5") & " " & .Range("D5") & " " & "PC"
>
>このように変更して実行してみましたが、何度やってもエラーにはなりません。
>
>もっとも xlRange や .Range("B5") や .Range("D5") に実際にはどんな値が入っているのかもわからないんですが。
・ツリー全体表示

【77536】Re:コメントサイズの自動調整エラー
回答  ウッシ  - 15/10/20(火) 10:18 -

引用なし
パスワード
   こんにちは

最初の質問で「item(i).Row」となっていたのでセルをSetしているのだろうと
想像は付きましたけど、こちらでもエラーは再現出来ませんでした。

Set objy = xlSheet.Cells.Find(What:=item(i), SearchOrder:=xlByColumns)

で検索結果が無いのでは?
・ツリー全体表示

【77535】Re:コメントサイズの自動調整エラー
発言  β  - 15/10/20(火) 10:04 -

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

ついでに申し上げますと、item() の正体がわからなかったので
Sub WComment(xlSheet As Worksheet, WMon As Long, WItem As Long)
と変更し、プロシジャ内で、item と i を 参照しているコードも

xlRange = xlRange.Value
ComTxt = .Range("B5") & " " & .Range("D5") & " " & "PC"

このように変更して実行してみましたが、何度やってもエラーにはなりません。

もっとも xlRange や .Range("B5") や .Range("D5") に実際にはどんな値が入っているのかもわからないんですが。
・ツリー全体表示

【77534】Re:コメントサイズの自動調整エラー
発言  β  - 15/10/20(火) 9:57 -

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

>item()には出荷された製品の製品コードが入ります。

情報の内容ではなく、 As Object と規定していますので、そのオブジェクトというのが
具体的に何なんだろう?というのが質問の意図です。

DIctionary なのか、あるいは?
item() と配列指定にしてありますので、どんなオブジェクトなのかなと。

こちらで、再現させてみようとしても、このオブジェクトが何者かがわからないので
引数に与えることができず、再現テストができないので質問しました。
・ツリー全体表示

【77533】Re:コメントサイズの自動調整エラー
発言  くまさん  - 15/10/20(火) 9:35 -

引用なし
パスワード
   念のため印刷を押下した際に実行される最初のコードも記載します。独学で作成したので、読みづらいところも多々あると思いますが、よろしくお願いします。

1つ目のファイルには
 ワークシート1には製品の出荷履歴(X軸には納入月、Y軸には製品コード)
 ワークシート2以降はオーダー毎の受注明細が記載されています。
2つ目のファイルには
 ワークシート1には発注履歴(今回は関係なし)
 ワークシート2には主要な製品の在庫表(入出庫履歴)(X軸には納入月、Y軸には製品コード)が記載されています。


Private Sub Workbook_BeforePrint(Cancel As Boolean)
  Dim xlSheet As Worksheet
  Dim yer As String
  Dim mon As String
  Dim item(4) As Object
  Dim i As Long
  i = 1
  Dim objx As Object
  Dim objy As Object
  Dim WMon As Long
  Dim WItem As Long
  
  ActiveSheet.PageSetup.BlackAndWhite = True

'受注明細を記載したシートのタブの色が赤の時のみ実行されるようにしています。
  If ActiveSheet.Tab.ColorIndex = 3 Then
'xlSheetには1つ目のファイルの出荷履歴のシートがセットされます。
    Set xlSheet = ThisWorkbook.Worksheets("商品マスター")
    With ActiveSheet
'yerには受注明細シートに記載されている納入年を、monには納入月が代入されます。それらの変数を使用し、出荷数を記入すべき出荷履歴シートのX軸を検索します。
      yer = Year(.Range("B5"))
      mon = Month(.Range("B5"))
      Set objx = xlSheet.Cells.Find(What:=DateValue(yer & "/" & mon & "/1"), SearchOrder:=xlByRows, LookIn:=xlFormulas)
'itemには製品コードが入ります。受注明細には最大4製品の売上まで1つのシートに記入できるので、item(4)まで有ります。それらの変数を使用し、出荷数を記入すべき出荷履歴シートのY軸を検索します。
      Set item(1) = .Range("B9")
      Set item(2) = .Range("B14")
      Set item(3) = .Range("B19")
      Set item(4) = .Range("B24")
      Do Until item(i) = ""
        Set objy = xlSheet.Cells.Find(What:=item(i), SearchOrder:=xlByColumns)
'検索されたX軸、Y軸の行、列の情報をそれぞれWMonとWItemに代入します。
        WMon = objx.Column
        WItem = objy.Row
'コメント記入のプロージャーを呼び出します。
        Call WComment(xlSheet, WItem, WMon, item(), i)
'2つ目のファイルに記入するプロージャーを呼び出します
        Call Standard(mon, item(), i)
        
        i = i + 1
      Loop
'受注明細に印刷日時を記入し、タブの色をオレンジに変更します。   
    .Range("I2") = Date
    .Tab.ColorIndex = 7
    End With
    ThisWorkbook.Activate
  End If
End Sub
・ツリー全体表示

【77532】Re:コメントサイズの自動調整エラー
発言  くまさん  - 15/10/20(火) 9:11 -

引用なし
パスワード
   ▼β さん:
ご記入ありがとうございます。
item()には出荷された製品の製品コードが入ります。
1つ目のファイルに記載されている売上情報の中から製品コードを抜き出し、それをクエリに出荷履歴をまとめたシートで出荷数量を記載すべき行を検索します。
売上情報を記載しているシートは1オーダー毎に作成しているため、最大4製品が1シート上に記載されます。


>▼くまさん さん:
>
>本筋には関係ないかもしれませんが、
>
>item() って、どんなオブジェクトですか?
・ツリー全体表示

【77531】Re:do~loop を使った式
発言  β  - 15/10/20(火) 3:38 -

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

ちなみにβなら

問題1 G2 に =SUMPRODUCT((WEEKDAY(A2:A1000)=3)*(C2:C1000))

問題2 A:D列を選択して条件付書式。【数式が】=$B1="鈴木" で 書式でフォント色を赤。
・ツリー全体表示

【77530】Re:do~loop を使った式
発言  β  - 15/10/20(火) 2:43 -

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

これは、学校なんかの課題でしょうか?
課題であれば、その前に、授業で習っているはずで、掲示板で質問して回答されたコードを提出するのは
【インチキ】だと思うんですがねぇ。

また、学校なんかの課題でなければ、Do/Loopを使えという前提は不要で、
この処理にふさわしい組み立て(For/Next 等々)でもいいのでは?

さらにいうなら、

問題1 は G2 に数式を入れる。(必要なら、曜日をセットする作業列をつくる)
問題2 は 領域に条件付書式を設定する。

が、いいのかもしれませんよ。


>問題で悩んでいます。
>ご存知でしたら教えてください
>
>
>日付        担当者    売上
>9月12日    土    鈴木    1,014
>9月13日    日    田村    5,340
>9月14日    月    中村    7,972
>9月15日    火    鈴木    6,686
>9月16日    水    鈴木    3,935
>9月17日    木    中村    9,799
>9月18日    金    田村    1,207
>9月19日    土    田村    4,764
>9月20日    日    中村    9,703
>9月21日    月    田村    1,495
>9月22日    火    中村    3,898
>9月23日    水    田村    5,688
>9月24日    木    鈴木    9,879
>9月25日    金    田村    3,210
>9月26日    土    中村    9,998
>9月27日    日    鈴木    7,632
>9月28日    月    鈴木    3,342
>9月29日    火    田村    7,211
>9月30日    水    田村    6,995
>10月1日    木    中村    2,861
>
>
>Do〜Loopステートメントを使用してください
>
>問題1
>火曜日の売上だけを合計して、セルG2に代入するマクロ
>
>問題2
>「担当者」列をチェックして、もし"鈴木"だったら
>その行のA列からD列までを、赤色の文字にするマクロ
・ツリー全体表示

【77529】do~loop を使った式
質問  質問  - 15/10/19(月) 22:07 -

引用なし
パスワード
   問題で悩んでいます。
ご存知でしたら教えてください


日付        担当者    売上
9月12日    土    鈴木    1,014
9月13日    日    田村    5,340
9月14日    月    中村    7,972
9月15日    火    鈴木    6,686
9月16日    水    鈴木    3,935
9月17日    木    中村    9,799
9月18日    金    田村    1,207
9月19日    土    田村    4,764
9月20日    日    中村    9,703
9月21日    月    田村    1,495
9月22日    火    中村    3,898
9月23日    水    田村    5,688
9月24日    木    鈴木    9,879
9月25日    金    田村    3,210
9月26日    土    中村    9,998
9月27日    日    鈴木    7,632
9月28日    月    鈴木    3,342
9月29日    火    田村    7,211
9月30日    水    田村    6,995
10月1日    木    中村    2,861


Do〜Loopステートメントを使用してください

問題1
火曜日の売上だけを合計して、セルG2に代入するマクロ

問題2
「担当者」列をチェックして、もし"鈴木"だったら
その行のA列からD列までを、赤色の文字にするマクロ
・ツリー全体表示

【77528】Re:コメントサイズの自動調整エラー
発言  β  - 15/10/19(月) 21:48 -

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

本筋には関係ないかもしれませんが、

item() って、どんなオブジェクトですか?
・ツリー全体表示

【77527】Re:コメントサイズの自動調整エラー
発言  くまさん  - 15/10/19(月) 17:41 -

引用なし
パスワード
   ▼ウッシ さん:
ご回答ありがとうございます。
引数について確認いたしましたが、いづれも1回目のコメント書き込みと同様のデータ型を使用しているので、問題ないように思われるのですが。
xlSheetにはWorksheet、WMon,WItemには数値


Sub Standard(mon As String, item() As Object, i As Long)
  Dim xlSheet As Worksheet
  Dim objx As Object
  Dim objy As Object
  Dim WMon As Long
  Dim WItem As Long
  
'エクセルをすでに開いているかの確認。
  If IsBookOpen("主要な製品在庫.xlsx") = False Then
    Workbooks.Open Filename:="C:\Users\User\Dropbox\主要な製品在庫.xlsx"
  End If

'ここでxlSheetにセットしています。
    Set xlSheet = Workbooks("主要な製品在庫.xlsx").Worksheets("標準品在庫")
'objxにコメントを書き込むX軸(売上月)の位置を検索します。
    Set objx = xlSheet.Cells.Find(mon & "月", SearchOrder:=xlByRows, LookAt:=xlWhole)
'objyにコメントを書き込むY軸(製品)の位置を検索します。
    Set objy = xlSheet.Cells.Find(item(i), SearchOrder:=xlByColumns, LookAt:=xlWhole)
’主要な製品ではければ、Subを抜けます。
    If objy Is Nothing Then
      Exit Sub
    End If
'WMonにコメントの書き込み列を、WItemに行をいれます。
    WMon = objx.Column + 1
    WItem = objy.Row
'コメント書き込みのプロージャーを呼び出します。
    Call WComment(xlSheet, WItem, WMon, item(), i)

End Sub


>こんにちは
>
>WCommentを呼び出す際の引数が間違っているのでは?
>
>xlSheetの内容、WItem、 WMonの値を確認して下さい。
・ツリー全体表示

【77526】Re:コメントサイズの自動調整エラー
回答  ウッシ  - 15/10/19(月) 17:12 -

引用なし
パスワード
   こんにちは

WCommentを呼び出す際の引数が間違っているのでは?

xlSheetの内容、WItem、 WMonの値を確認して下さい。
・ツリー全体表示

【77525】Re:コメントサイズの自動調整エラー
発言  くまさん  - 15/10/19(月) 17:08 -

引用なし
パスワード
   ▼ウッシ さん:
早速のご回答ありがとうございます。
記述頂いたコードで実行してみましたが、やはり同じ箇所でエラーが起こります。

Set xlRange = xlSheet.Cells(WItem, WMon)でxlRangeにセットした時点でウォッチウインドウのCommnet.Shape.TextFrame.AutoSizeの欄が”アプリケーション定義または〜"と表示されています。
もし2つ目のファイル呼び出し箇所等、必要なものがあれば追記致しますので、よろしくお願いします。


>こんにちは
>
>どうしてエラーになるのか分からないのですが、
>
>一旦削除して再セットするとどうなりますか?
>
>    If Not xlRange.Comment Is Nothing Then
>      ComTxt = xlRange.Comment.Text & vbCrLf & ComTxt
>    End If
>    On Error Resume Next
>    xlRange.Comment.Delete
>    On Error GoTo 0
>    
>    xlRange.AddComment Text:=ComTxt
>    'コメント欄のサイズを自動調整します。ここでエラー発生(2回めのみ)。
>    xlRange.Comment.Shape.TextFrame.AutoSize = True
>
>原因はちゃんと究明した方がいいですけど・・・
・ツリー全体表示

【77524】Re:コメントサイズの自動調整エラー
回答  ウッシ  - 15/10/19(月) 16:13 -

引用なし
パスワード
   こんにちは

どうしてエラーになるのか分からないのですが、

一旦削除して再セットするとどうなりますか?

    If Not xlRange.Comment Is Nothing Then
      ComTxt = xlRange.Comment.Text & vbCrLf & ComTxt
    End If
    On Error Resume Next
    xlRange.Comment.Delete
    On Error GoTo 0
    
    xlRange.AddComment Text:=ComTxt
    'コメント欄のサイズを自動調整します。ここでエラー発生(2回めのみ)。
    xlRange.Comment.Shape.TextFrame.AutoSize = True

原因はちゃんと究明した方がいいですけど・・・
・ツリー全体表示

【77523】メール自動作成マクロの質問です
質問  SHO  - 15/10/19(月) 15:20 -

引用なし
パスワード
   ネットに展開されているソースを改変して
使用している程度の初心者です。

2度目ですが、皆様のお力を貸していただければと思います。

excelに書いてある内容をメールに書き出すマクロを製作しています。
Outlookを呼び出してメールの作成画面で宛先が自動で入力されているところまでうまく行きましたが、
件名と本文が思うように出力することができません。
objMAIL.subject = "" と objMAIL.body = ""
に関数を入れるところまでは分かっているのですが、
どのように作成すればうまく動くのかご教授願います。

こちらの希望している動きとしては、
・件名に「日報」と今日の日付(MM月DD日(aaa)のフォーマット)が自動で入力される。
・本文には10行目からのセルの内容
 終了行は毎回変わる
 時間が入っているセルにはHH:MMのフォーマットで出力
10行目からのセルには
9:00 〜 9:15
○朝会    
=C10 〜 0:00                
みたいな感じで格納されています。

不足、不明点あればお答えします。
お手数おかけしますが、よろしくお願い致します。
・ツリー全体表示

【77522】コメントサイズの自動調整エラー
質問  くまさん  - 15/10/19(月) 15:14 -

引用なし
パスワード
   はじめまして、自己流でVBA学習中の者です。
コメントサイズの自動調整(XXX.Comment.Visible = True)でエラーが発生し、自己解決が出来そうにないので、質問させていだきます。使用環境はEXCEL2013です。

内容としては、1つ目のファイルでは製品の売上と出荷履歴の管理、2つ目のファイルには主要な製品の出荷管理をしています。
1つ目のファイルに売上の詳細を記入し印刷を押下すると、このファイルに記述されているVBAが呼び出され以下の動作をします。

1.出荷数をまとめた別のワークシートに、注文が入った製品の出荷量を記載する。
2.そのセルにコメント(客先や出荷数など)を記入する。
3.コメントの枠のサイズを自動的に調整する。

主要な製品の場合、2つ目のファイルが呼び出され、上記VBAが再度実行されます。
問題はこの2つ目のエクセルにコメント記入後、サイズを自動調整した際に起こります。
以下がコメントを記入する部分のコードです。

Sub WComment(xlSheet As Worksheet, WMon As Long, WItem As Long, item() As Object, i As Long)
Dim xlRange As Range
Dim ComTxt As String

’ActiviSheetは1つ目のファイルにある売上詳細を記入したワークシートです。
With ActiveSheet
xlSheetは出荷数をまとめたシートです。WMonは出荷月、WItemは売上製品です。(シートには出荷月・売上製品ごとに出荷数をまとめています。)
Set xlRange = xlSheet.Cells(WMon, WItem)
'xlRangeに既に数字(出荷数)が記入されている場合、加算します。
xlRange = .Range("F" & item(i).Row).Value + xlRange.Value
'ComTxt(コメント内容)はActiveSheet(売上詳細のシート)に記載されている日付、客先、出荷数を記載します。
ComTxt = .Range("B5") & " " & .Range("D5") & " " & .Range("F" & item(i).Row).Value & "PC"
'もし、xlRangeにコメントがない場合は新規でコメントを追加します。
If xlRange.Comment Is Nothing Then
xlRange.AddComment Text:=ComTxt
'すでに、xlRangeにコメントがある場合、現在のコメントを改行し、新しいコメントを追記します。
Else
xlRange.Comment.Text Text:=xlRange.Comment.Text & vbCrLf & ComTxt
End If
'コメント欄のサイズを自動調整します。ここでエラー発生(2回めのみ)。
xlRange.Comment.Shape.TextFrame.AutoSize = True
End With
End Sub

エラーメッセージは次のように表示されます。
”アプリケーション定義またはオブジェクト定義のエラーです。”

1つ目のファイルに書き込む際はエラーが起きていないので、別のファイルに書き込むのが問題ないのでしょうか?

以上、ご教授よろしくお願いします。
・ツリー全体表示

【77521】Re:フィルター並べ替え後の検索
お礼  キキ  - 15/10/19(月) 12:00 -

引用なし
パスワード
   β様

お世話になっております。
先日は、迅速にご丁寧に回答頂きありがとうございました。

早速試しましたところ、回答頂いた内容でうまく作動致しました。
大変感謝しております。ありがとうございました。

キキ
・ツリー全体表示

【77520】Re:マクロの繰り返し
発言  β  - 15/10/18(日) 13:27 -

引用なし
パスワード
   ▼もでぃ さん:

G2 に =IF(OR(E2="有",F2="有"),"有","")

こんな式を入れて、最終行までフィルコピーして値をセットさせるという手もありますね。

マナさんの手順を参考にすれば

必要な部品としては

1)A列の最終行セルを求めるマクロ
2)G列の2行めから最終行セルまでのC2:G○ の領域の Formulaプロパティに
  "=IF(OR(E2=""有"",F2=""有""),""有"","""")" を入れて(1行)
3)C2:G○ の Value を C2:G○ のValue で上書き

こうするとループなしで実行できますね。

・ツリー全体表示

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