Excel VBA質問箱 IV

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

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


1 / 3732 ページ 前へ→

【80270】Re:罫線が引けない
発言[NEW]  マナ  - 18/12/15(土) 9:07 -

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

>教えていただけませんでしょうか?

もう必要ないですね。
ht tp://www.excel.studio-kazu.jp/kw/20181215071343.html
・ツリー全体表示

【80269】Re:罫線が引けない
質問[NEW]  ここな  - 18/12/15(土) 7:29 -

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

外側という意味が分かりませんので」
教えていただけませんでしょうか?
・ツリー全体表示

【80268】Re:罫線が引けない
発言[NEW]  マナ  - 18/12/14(金) 23:06 -

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

Option Explicit
を記述するようにしてください。

ht tp://officetanaka.net/excel/vba/beginner/11.htm

--------
ところで、

>「データ」シートの該当セルが空白なら
  
>If sh1.Range("AC" & i).Value = "" Then

内側のループより外側に記述すべきでは?
・ツリー全体表示

【80267】罫線が引けない
質問[NEW]  ここな  - 18/12/14(金) 22:09 -

引用なし
パスワード
   VBA初心者です。
「データ」シートの該当セルが空白なら
印刷用シートの罫線を引くということがしたいのですが
どうしても上手くいきません。
ググって修正はしてみたのですが、どうにもなりません。
(メッセージは変わりますが実行時エラー1004になる)
お知恵をお貸しください。


Private Sub Worksheet_Change(ByVal Target As Range)

Dim sh1 As Worksheet: Set sh1 = Worksheets("data")
Dim sh2 As Worksheet: Set sh2 = Worksheets("print")

Dim i As Long
Dim n As Long

For i = 12 To 186 Step 6
For n = 19 To 193 Step 6

ここがどう修正して良いかずっと悩んでいます。
With sh2.Range(sh2.Cells(n, 31), sh2.Cells(n + 1, 31)).Borders(xldialognalup)
    
If sh1.Range("AC" & i).Value = "" Then
.LineStyle = xlContinuous
Else
.LineStyle = xlNone
      
End If

End With

Next n
Next i

End Sub
・ツリー全体表示

【80266】Re:ユーザー定義関数の質問です
お礼  吉庄 E-MAIL  - 18/12/11(火) 13:48 -

引用なし
パスワード
   ▼γ さん:
早速のご返事ありがとうございます。
Specなんですね。別の方法を考えてみます。
大変有難うございました。

以上
・ツリー全体表示

【80265】Re:ユーザー定義関数の質問です
発言  γ  - 18/12/10(月) 7:35 -

引用なし
パスワード
   補足:

ユーザー定義関数ではないプロシージャであれば何でも可能ですが、
ユーザー定義関数にはワークシート関数としての制約があります。

こうしたことを認めてしまうと、そのセルに書かれた内容だけでなく、
セルに影響を及ぼす範囲がすべてのセルに拡がってしまって、
トレーサビリティが失われてしまいます。
検証ができなくなってしまいます。そういうことではないでしょうか。

注目しているセル以外の変更やセルの書式の変更
(これを"副作用"と呼ぶことが多い)に禁欲的であることは、
関数型の言語に見られる特徴のひとつです。
・ツリー全体表示

【80264】Re:ユーザー定義関数の質問です
回答  γ  - 18/12/9(日) 21:01 -

引用なし
パスワード
   ▼吉庄 さん:
>どうしたらこの不具合を訂正できますでしょうか?
不具合ではありません。

仕様です。
ユーザー定義関数は、
セットされているセル以外のセルの状態を変更することが禁止されています。

Excel のユーザー定義関数の制限について
ht tps://support.microsoft.com/ja-jp/help/170787/description-of-limitations-of-custom-functions-in-excel
・ツリー全体表示

【80263】ユーザー定義関数の質問です
質問  吉庄 E-MAIL  - 18/12/9(日) 20:37 -

引用なし
パスワード
   下のWorksheet 関数Deliv33をworksheet上で 「=Deliv33(A1)」と記入しEnterすると#value!となります。
ところが、黄色のSQST.Cells(JJ,K).Value = ARG1をコメントアウトすると呼び出しもとのworksheetで、「=Deliv33(A1)」と記入しEnterを押すと正しく動作します。
IFの一行下をSET SQST.Cells(JJ,K).Value = ARG1はダメでした。一行目のARG1はDATE形式を指しているのでAS  RANGEをAS DATEにしてみましたがダメでした。
どうしたらこの不具合を訂正できますでしょうか?ご教示いただければありがたいのですが、よろしくお願いいたします。

Public Function DELIV33(ByVal ARG1 As Range) As Date
    FNAME = Workbooks(1).Name
    Set CST = Workbooks(FNAME).Sheets(3)
    Set SQST = Workbooks(FNAME).Sheets(13)
    
    If Not IsEmpty(ARG1) Then
      SQST.Cells(JJ,K).Value = ARG1
      DELIV33 = SQST.Cells(65, 11).Value
      Exit Function
    End If
End Function
・ツリー全体表示

【80262】Re:特定の文字列のみ削除
発言  マナ  - 18/12/9(日) 16:36 -

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

置換操作でできます。
検索する文字列に、削除したい特定の文字を入力し、
置換後の文字列に、何も入力しなければよいです。
・ツリー全体表示

【80261】特定の文字列のみ削除
質問  Beginner  - 18/12/9(日) 15:47 -

引用なし
パスワード
   表の中の特定の文字列のみを削除したいので、
御教示頂ければと思います。

行の削除ではなく、セルにある特定の文字のみです。

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

【80260】Re:Targetにユーザーフォームの値を取得...
回答  亀マスター  - 18/12/5(水) 23:44 -

引用なし
パスワード
   >ちなみに、標準モジュールはこの箇所に関しては使用しておらず、
>BeforeDoubleClickはシートのモジュールで、あとはユーザーフォームモジュールです。
>この場合、標準モジュールに書くとご指示いただいたところは、シートモジュールに記載すればよろしいでしょうか?

シートモジュールに書くとシートモジュールに記述されたイベント等からしか呼び出せません。そのため、ユーザーフォームモジュールとシートモジュールの両方から呼び出す必要のある変数は、標準モジュールにパブリック宣言で書く必要があります。

具体的に、前回私が回答した1の処理で言えば、bufはフォームモジュールからしか呼び出さないので、フォームモジュールでも標準モジュールでもどちらでも良いですが、Rngはシートモジュールからも呼び出すので、標準モジュールに書く必要があります。
・ツリー全体表示

【80259】Re:Targetにユーザーフォームの値を取得...
質問  babolat  - 18/12/5(水) 11:49 -

引用なし
パスワード
   亀マスター様

ご回答いただきありがとうございました。
御礼が遅くなり失礼いたしました。

後で試してみます。

ちなみに、標準モジュールはこの箇所に関しては使用しておらず、
BeforeDoubleClickはシートのモジュールで、あとはユーザーフォームモジュールです。
この場合、標準モジュールに書くとご指示いただいたところは、シートモジュールに記載すればよろしいでしょうか?
・ツリー全体表示

【80258】Re:ExcelVBA 外部データのピボットをまと...
発言  マナ  - 18/12/4(火) 18:45 -

引用なし
パスワード
   ▼VBA初心者 さん:

>もうひと押しのような印象なので諦めきれません!

こちらでは、原因がわかりませんが、
DATA_SOURCEは、期待通りのアドレスとなっていることは確認済みでしょうか。
・ツリー全体表示

【80257】Re:Targetにユーザーフォームの値を取得...
回答  亀マスター  - 18/12/4(火) 0:02 -

引用なし
パスワード
   >Target.Value=変数を書くのは、
>ユーザーフォームとシートのどちらに、どのタイミングでしょうか?

やり方はいくつかあると思いますが、とりあえず2つほど

1.フォームのcmb_syukeikaisi_Clickで実行
1-1
bufはcbm_sansyou_Clickの中ではなくUserFormの直下で宣言するか、標準モジュールにパブリック宣言する。
1-2
標準モジュールにRange型の変数をパブリック宣言で用意しておく(例:Rng)
1-3
UserForm.Showの前に、RngにTargetの参照を格納。
(直接Targetを使わないのは、TargetはBeforeDoubleClickの中でしか動かないから)
  Set Rng = Target
1-4
bufに必要な値が入ったら、Rngを介してTargetに値を代入。
  Rng.Value = buf

2.WorkSheetのBeforeDoubleClickで実行
2-1
bufは標準モジュールにパブリック宣言する。
2-2
bufに必要な値が入ったら、フォームを閉じる。
  Unload Me
2-3
WorkSheetのUserForm.Showの続きでTargetにbufの値を代入。
  UserForm.Show
  Target.Value = buf


なお、質問に対する回答ではないのですが、ActiveWorkbookやActiveSheetは何らなの都合で狙ったブックやシートがアクティブになっていなかったときに不具合が起こるので、ブックを開いたときにWorkbook型やWorksheet型の変数に参照を格納し、それを使って操作した方が確実かと思います。
・ツリー全体表示

【80256】Re:ExcelVBA 外部データのピボットをまと...
発言  VBA初心者  - 18/12/3(月) 23:13 -

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

返信ありがとうございます!
ただ…

>      pvt.SourceData = DATA_SOURCE

この部分で
実行時エラー ‘1004’:
アプリケーション定義またはオブジェクト定義のエラーです

と出てしまいます。
もうひと押しのような印象なので諦めきれません!
・ツリー全体表示

【80255】Re:Targetにユーザーフォームの値を取得...
質問  babolat  - 18/12/3(月) 20:03 -

引用なし
パスワード
   亀マスター様

早々にご回答いただきありがとうございます。
Target.Value=変数を書くのは、
ユーザーフォームとシートのどちらに、どのタイミングでしょうか?

尚、今考えている流れは以下の通りです。


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'あるシートでダブルクリックをするとUserFormが立ち上がる
UserForm.Show  
End Sub

Private Sub cbm_sansyou_Click()
'sansyouボタンを押すとファイルを選択するダイアログが表示される
'選択したファイルをmyFileに取得する
Dim myFile As Variant,buf as long
myFile = Application.GetOpenFilename
If VarType(myFile) = vbBoolean Then
MsgBox "キャンセルされました"
else
MsgBox myFile & " が選択されました"
End If
'myFileで選択したファイルのセルD17の値をbufに入れる
Workbooks.Open Filename:=myFile
buf = ActiveSheet.Range("D17")
ActiveWorkbook.Close
End Sub

Private Sub cmb_syukeikaisi_Click()
'UserFormのsyukeikaisiボタンを押すとダブルクリックしたシートのTargetにbufが入る
'ここに何を書くべきかよくわかりません
End Sub


お手数をおかけしてしまい申し訳ありません。
どうぞよろしくお願いいたします。
・ツリー全体表示

【80254】Re:ExcelVBA 外部データのピボットをまと...
発言  マナ  - 18/12/3(月) 19:52 -

引用なし
パスワード
   ▼VBA初心者 さん:

フォルダごとコピーすれば、問題ないような気がしますが…
テーブル名で指定しているからでしょうか?

>都度同フォルダ内のソースを取得して更新したいのですが、可能でしょうか?

Sub test()
  Dim wb As Workbook
  Dim DATA_SOURCE As String
  Dim ws As Worksheet
  Dim pvt As PivotTable
  
  Set wb = Workbooks.Open(ThisWorkbook.Path & "\データ.xlsx")
  DATA_SOURCE = wb.Sheets("データ").Cells(1).CurrentRegion.Address(, , xlR1C1, True)

  For Each ws In ThisWorkbook.Worksheets
    For Each pvt In ws.PivotTables
      pvt.SourceData = DATA_SOURCE
    Next
  Next
  
  wb.Close False

End Sub
・ツリー全体表示

【80253】Re:Targetにユーザーフォームの値を取得...
回答  亀マスター  - 18/12/3(月) 19:45 -

引用なし
パスワード
   TargetはダブルクリックしたセルをRange型の変数として取得しているので、

  Target.Value = 入力したい値(2.で取得した変数)

とすればいけると思いますよ。

なお、ダブルクリック時のイベントで

  Cancel = True

としておかないと、必要な値は入力できたもののそこが入力待機状態になるので、それが嫌ならどうぞ。
・ツリー全体表示

【80252】Re:エラーが出ます
発言  マナ  - 18/12/3(月) 19:41 -

引用なし
パスワード
   ▼よろしくおねがいします さん:

>いくつものシートを転記したい場合 for〜nextの繰り返しということはできないのでしょうか
>

For i = 3 To 50

とするとよいです。
・ツリー全体表示

【80251】Targetにユーザーフォームの値を取得する
質問  babolat  - 18/12/3(月) 19:28 -

引用なし
パスワード
   皆様方、どうかご教授をお願いいたします。
初心者のため、質問に過不足がありましたらお許しください。

1.あるシートでセルをダブルクリックをするとユーザーフォーム(ファイル選択ダイアログボックス)が立ち上がります。
セルの位置がTargetに入ります。
2.ユーザーフォーム内で他のファイルを選択し、選択したファイルにある値を変数に取得します。
3.ダブルクリックをしたセルA1=Tagetにその変数を入れたいと考えています。

2.まではできたのですが、3.のやり方がどうしてもわかりません。

どのように書けばよろしいのでしょうか?
何卒よろしくお願いいたします。
・ツリー全体表示

1 / 3732 ページ 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free