Excel VBA質問箱 IV

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

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


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

【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.のやり方がどうしてもわかりません。

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

【80250】Re:エラーが出ます
質問  よろしくおねがいします  - 18/12/3(月) 16:52 -

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

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

>iを、4, 5, 6,…と、順番に同じことを繰り返すだけです。

というのは
i=4 
i=5

の後にそれぞれ文をつけて作成するということでしょうか

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

お時間があるときにヒントをいただけますと幸いです
よろしくお願いします
・ツリー全体表示

【80249】ExcelVBA 外部データのピボットをまとめ...
質問  VBA初心者  - 18/12/3(月) 6:20 -

引用なし
パスワード
   VBA初心者です。

アクティブなワークブックの非アクティブなシート3つにそれぞれひとつずつ計3つのピボットテーブルを作成しております。
ピボットテーブルはいずれも同じデータソースを利用しており、データソースは別のワークブックにあるテーブルです。

データソースが頻繁にデータが追加されるため、アクティブシートに設置したコマンドボタンからピボットテーブルのソースをまとめて更新したいと思うのですが、ワークブックとデータソースを収納するフォルダごと他者(Excelど素人)に渡すことがあるため、絶対パスを用いず、かつ「データソースに接続できません」というエラーを出さずにピボットテーブルを更新したいのですが…

ActiveWorkbook.RefreshAll
では、フォルダごとコピーしてコピー先のデータソースを更新しても別フォルダのはずのコピー元をいつまでも参照しており失敗


Sub Commandbutton1_Click()
 
Dim DATA_SOURCE As Worksheet
Dim DATA As String
Dim wb As Workbook
Dim PvtCache As PivotCache

DATA = ThisWorkbook.Path & “\データ.xlsx”
wb = Workbooks(DATA)
Set DATA_SOURCE = wb.Worksheets(“データ”)

Set PvtCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=DATA_SOURCE)
 
End Sub


これでどうだと自分なりに記述したものの全く作動せず。
頻繁にブックがフォルダごとコピーや移動されるので都度同フォルダ内のソースを取得して更新したいのですが、可能でしょうか?

教えていただければ幸いです。
・ツリー全体表示

【80248】Re:エラーが出ます
発言  マナ  - 18/11/30(金) 18:12 -

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

>この場合 3シートから50シートまで転記したいのですが
>できるのでしょうか

iを、4, 5, 6,…と、順番に同じことを繰り返すだけです。
・ツリー全体表示

【80247】Re:エラーが出ます
質問  よろしくおねがいします  - 18/11/30(金) 14:14 -

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

マナ様
早々にご指導ありがとうございます
下記のように直したらできました!
おっしゃる通り 慣れていないもので いきなり
複数のシートを転記することはむずかしいでしょうか・・。
この場合 3シートから50シートまで転記したいのですが
できるのでしょうか
お時間があるとき ヒントをいただければ大変助かります
(この書式を使ったら など・・)
よろしくお願いします
・ツリー全体表示

【80246】Re:エラーが出ます
発言  マナ  - 18/11/29(木) 18:30 -

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

>3シートから50シートまでの同じ表の数字を 提出データのシートに転記するには、

慣れないうちは。一つのシートについて最初に考えるとよいです。
こんな感じでしょうか。

Sub 転記2()
  Dim tenki As Long
  Dim i As Long
  Dim tenpo As Long
 

  tenki = 2   '転記データ2行目から
  
  i = 3
  
  '店舗データ5行目から入力行まで
  For tenpo = 5 To Worksheets(i).Range("b4").End(xlDown).Row
  
    Worksheets("提出データ").Range("c" & tenki).Value = Worksheets(i).Range("b" & tenpo).Value
    
    tenki = tenki + 1

  Next
 
End Sub
・ツリー全体表示

【80245】エラーが出ます
質問  よろしくおねがいします  - 18/11/29(木) 16:25 -

引用なし
パスワード
   はじめまして 
よろしくお願いします
本やサイトなどで見て試行錯誤ながら 作ったのですが
エラーが出たり 思うように反映しません

やりたいこと
3シートから50シートまでの同じ表の数字を 提出データのシートに転記するには、下記で何が足りないのか、修正すればよいかご教示いただけたら幸いです


Sub 転記()

  Const TENKI_SAKI = 1
  Const TEISYUTU_SAKI = 1
  Const WKST_SAKI = 1
  

  Dim tenki    ’転記データ変数
  Dim i       'ワークシート変数
  Dim tenpo     '店舗データ変数
  
  
  MsgBox "転記します"
  
  tenki = TENKI_SAKI   '転記データ2行目から
  
  For i = 3 To 50
    
  Worksheets("提出データ").Range("c" & tenki).Value = Worksheets(i).Range("b" & tenpo).Value

  For tenpo = 5 To Worksheets(i).Range("b4").End(xlDown).Row 
  '店舗データ5行目から入力行まで

  tenki = tenki + TEISYUTU_SAKI
  
  i = i + WKST_SAKI
  
  Next
  Next

  
End Sub
・ツリー全体表示

【80244】Re:Excelでリストの自動入力
発言  りった  - 18/11/27(火) 12:19 -

引用なし
パスワード
   ▼サボテン さん:
>はじめまして、よろしくお願いします。
>
>Excelでカレンダー表示で会議の予定を管理するように言われています。
>カレンダー表示で、縦列には参加者の一覧、横列には1日〜31日までの日付で表を作成しています。
>会議がある対象の日にちの上段でプルダウンなどで会議を選択するとその参加対象者の予定欄に自動で値が入力するようにしたいのですがどのようにすればよいかご教授いただければと思い投稿させていただきました。
>
>よろしくお願いいたします

「プルダウンで選んだときに動く」を実現する方法が分からないということでしたら、Worksheet_Change で概ねご希望の動作になるんじゃないかなと思います。

以下、サンプルです。
実行条件:
・Sheet1のマクロとして登録すること。(動作確認済み。全コピOK。)
・セルの名前定義"AAA"が有ること

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Sheet1.Range("AAA")) Is Nothing Then
    Sheet1.Cells(5, Sheet1.Range("AAA").Column).Value = Sheet1.Range("AAA").Value
  End If
End Sub
・ツリー全体表示

【80243】Re:Win32AIPのwaveOut関数を利用する方法
発言  Jaka  - 18/11/22(木) 17:19 -

引用なし
パスワード
   >  format As WAVEFORMAT, _

API 知らないので、回答ではないけれど、
なんで、format関数というのがあるのに、
変数名にして、物を入れようとするのか・・・・。
その辺がいい加減だからじゃないですか?

あと 私は絶対使わない変数名、rc もやめた方がいいかと。
・ツリー全体表示

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