Excel VBA質問箱 IV

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

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


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

【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 もやめた方がいいかと。
・ツリー全体表示

【80242】Win32AIPのwaveOut関数を利用する方法
質問  ななみつき  - 18/11/22(木) 13:16 -

引用なし
パスワード
   マルチバッファリングを利用して音を途切れさせずに再生させるためVBAでWin32APIのwaveOut関数を利用したいです。モジュールに下記のように書いてみたのですがエラーも出ないまま落ちてしまいます。どのように改善すればいいでしょうか。

<参考にしたサイト>
ht tp://www13.plala.or.jp/kymats/study/MULTIMEDIA/waveOut_create.html
ht tp://www.chujno.com/admon/ctools/vbapi/apidetail.asp?api_id=531

<動作>バイト配列上の一秒間のサイン波を再生します

<注意>下記のコードを実行するとExcelごと落ちます

Option Explicit
'===============================================
Type WAVEFORMAT
  wFormatTag As Integer
  nChannels As Integer
  nSamplesPerSec As Long
  nAvgBytesPerSec As Long
  nBlockAlign As Integer
  wBitsPerSample As Integer
  cbSize As Integer
End Type

Type WAVEHDR
  lpData() As Byte
  dwBufferLength As Long
  dwBytesRecorded As Long
  dwUser As Long
  dwFlags As Long
  dwLoops As Long
  lpNext As Long
  Reserved As Long
End Type
'----------------------------------------------------
Declare Function waveOutOpen Lib "winmm.dll" _
  (hWaveOut As Long, _
  uDeviceID As Long, _
  format As WAVEFORMAT, _
  dwCallback As Long, _
  fPlaying As Boolean, _
  dwFlags As Long) As Long
  
Declare Function waveOutPrepareHeader Lib "winmm.dll" _
  (hWaveIn As Long, _
  lpWaveInHdr As WAVEHDR, _
  uSize As Long) As Long
  
Declare Function waveOutWrite Lib "winmm.dll" _
  (hWaveOut As Long, _
  lpWaveOutHdr As WAVEHDR, _
  uSize As Long) As Long

Declare Function waveOutGetErrorText Lib "winmm.dll" Alias "waveInGetErrorTextA" _
  (err As Long, _
  lpText As String, _
  uSize As Long) As Long
  
Declare Function waveOutReset Lib "winmm.dll" (ByVal hWaveIn As Long) As Long

Declare Function waveOutUnprepareHeader Lib "winmm.dll" _
  (ByVal hWaveIn As Long, _
  lpWaveInHdr As WAVEHDR, _
  ByVal uSize As Long) As Long
  
Declare Function waveOutClose Lib "winmm.dll" (ByVal hWaveIn As Long) As Long
'----------------------------------------------------
Public Const CALLBACK_FUNCTION = &H30000
Public Const CALLBACK_NULL = 0
Public Const CALLBACK_WINDOW = &H10000
Public Const WHDR_BEGINLOOP = 4
Public Const WHDR_ENDLOOP = 8
Public Const MM_WOM_DONE = &H3BD
Public Const MMSYSERR_NOERROR = 0
Public Const WAVE_FORMAT_PCM = 1

Public Const PIE = 3.141592

'----------------------------------------------------
Dim rc As Long 'return code
Dim hmem(1) As Long ' memory handles
Dim pmem(1) As Long ' memory pointers
Dim hdr(1) As WAVEHDR ' wave headers
Dim hWaveOut As Long ' waveout handle
Dim msg As String * 250 ' message buffer
Dim hwnd As Long ' window handle

'====================================================
Sub main()
  Dim a
  a = play()
End Sub

Public Function play() As Boolean
  Dim wfe As WAVEFORMAT
  Dim whdr As WAVEHDR
  Dim wave() As Byte
  
  wfe.wFormatTag = WAVE_FORMAT_PCM
  wfe.nChannels = 2
  wfe.wBitsPerSample = 8
  wfe.nBlockAlign = wfe.nChannels * wfe.wBitsPerSample / 8
  wfe.nSamplesPerSec = 8000
  wfe.nAvgBytesPerSec = wfe.nSamplesPerSec * wfe.nBlockAlign

  rc = waveOutOpen(hWaveOut, 0, wfe, 0, 0, 0)
  If (rc <> MMSYSERR_NOERROR) Then
    waveOutGetErrorText rc, msg, Len(msg)
    MsgBox msg
    play = False
    Exit Function
  End If
  
  Dim i
  For i = 0 To wfe.nAvgBytesPerSec - 1
    ReDim wave(i)
  Next
  
  For i = 0 To wfe.nAvgBytesPerSec - 1
    wave(i) = 128 + 64 * Sin(2 * PIE * i * 440 / wfe.nAvgBytesPerSec)
  Next
  
  whdr.lpData = wave
  whdr.dwBufferLength = wfe.nAvgBytesPerSec * 2
  whdr.dwFlags = WHDR_BEGINLOOP & WHDR_ENDLOOP
  whdr.dwLoops = 1
    
  rc = waveOutPrepareHeader(hWaveOut, whdr, Len(whdr))
  If (rc <> MMSYSERR_NOERROR) Then
    waveOutGetErrorText rc, msg, Len(msg)
    MsgBox msg
  End If
  
  
  rc = waveOutWrite(hWaveOut, whdr, Len(whdr))
  If (rc <> MMSYSERR_NOERROR) Then
    waveOutGetErrorText rc, msg, Len(msg)
    MsgBox msg
  End If
  
  rc = waveOutReset(hWaveOut)
  If (rc <> MMSYSERR_NOERROR) Then
    waveOutGetErrorText rc, msg, Len(msg)
    MsgBox msg
  End If
  
  rc = waveOutUnprepareHeader(hWaveOut, whdr, Len(whdr))
  If (rc <> MMSYSERR_NOERROR) Then
    waveOutGetErrorText rc, msg, Len(msg)
    MsgBox msg
  End If
  
  rc = waveOutClose(hWaveOut)
  If (rc <> MMSYSERR_NOERROR) Then
    waveOutGetErrorText rc, msg, Len(msg)
    MsgBox msg
  End If
  
End Function
・ツリー全体表示

【80241】Re:Excelでリストの自動入力
発言  γ  - 18/11/21(水) 22:28 -

引用なし
パスワード
   ▼サボテン さん:

>会議がある対象の日にちの上段でプルダウンなどで会議を選択すると
>その参加対象者の予定欄に自動で値が入力するようにしたいのですが

自動で値を入力したいということですが、
その情報はどこにあるのですか?

31日の右側に、会議ごとの入力値を予めセットしておき、
それをコピーペイストするようにしてみてはどうですか?
・ツリー全体表示

【80240】Excelでリストの自動入力
質問  サボテン  - 18/11/20(火) 11:51 -

引用なし
パスワード
   はじめまして、よろしくお願いします。

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

よろしくお願いいたします
・ツリー全体表示

【80239】RPAツールとVBA
質問  りった  - 18/11/16(金) 23:31 -

引用なし
パスワード
   RPAツールとVBAは、補完的に使われることが多いものですか?排他的に使われることが多いものですか?

例えば、WEBサイトへの入出力をRPAツールが担当し、データに応じ何をするかの判断等をVBAで記述するのが適切な使い方ですか?

補完的な使い方のイメージ
1.VBAマクロで、やることリストを作る。
2.RPAツールがやることリストをもとに、WEBサイトに入力をする。
・ツリー全体表示

【80238】ActiveWindowがエクセル以外であることを...
質問  りった  - 18/11/13(火) 23:57 -

引用なし
パスワード
   ActiveWindowがエクセル以外であることを調べるにはどうしたら良いでしょうか?

背景:
ブラウザで動作する業務アプリへの打ち込みが面倒なので、
sendKeysによる自動化が出来ないか検証しています。
EXCELでマクロを開始後、SLEEPしている間にALT+TABすれば動作するのですが、
待っているのがだるいですし、逆に時間が足りなかったりしないか心配です。
・ツリー全体表示

【80237】Re:IF文で複数条件を指定する方法
お礼  ABCD  - 18/11/9(金) 15:15 -

引用なし
パスワード
   ▼よろずや さん:

試したところ、想定通りの結果となりました。

初歩的な質問にもかかわらず、
ご親切に回答くださいましてありがとうございました。
・ツリー全体表示

【80236】Re:IF文で複数条件を指定する方法
回答  よろずや  - 18/11/9(金) 13:57 -

引用なし
パスワード
   ▼ABCD さん:
>=================================================
>
> If Range("A" & i).Value = "●" And _
  ( Range("B" & i).Value = "aa" Or _
   Range("B" & i).Value = "bb" ) Then
>            
>   Range("C" & i).Value = "1."
>      
> ElseIf Range("A" & i).Value = "■" And _
    ( Range("B" & i).Value = "aa" Or _
     Range("B" & i).Value = "bb" ) Then
>            
>   Range("C" & i).Value = "2."
> 
> End If
>=================================================

演算子の優先順位を変更するには、
カッコを書く必要があります。
・ツリー全体表示

【80235】IF文で複数条件を指定する方法
質問  ABCD  - 18/11/9(金) 12:49 -

引用なし
パスワード
   例)
  A | B | C |
1| ● | aa | 1. |
|  |  |  |
2| ● | bb | 1. |
|  |  |  |
3| ■ | aa | 2. |
|  |  |  |
4| ■ | bb | 2. |


上記のようなデータがあるとして、C列に結果を入力していく処理を行いたいです。
条件、処理結果は以下の2パターンとします。
---
・A列が"●"且つB列が"aa"または"bb"であればC列に"1."
・A列が"■"且つB列が"aa"または"bb"であればC列に"2."

---

そのため、以下のようにコードを書きましたが上手くいきません。
=================================================

 If Range("A" & i).Value = "●" And _
   Range("B" & i).Value = "aa" Or _
   Range("B" & i).Value = "bb" Then
            
   Range("C" & i).Value = "1."
      
 ElseIf Range("A" & i).Value = "■" And _
   Range("B" & i).Value = "aa" Or _
   Range("B" & i).Value = "bb" Then
            
   Range("C" & i).Value = "2."
 
 End If
=================================================
これを実行すると2つめの処理が上手く動作せず、結果が全て"1."となります。
原因について、どなたか教えてくださいますと幸いです。
・ツリー全体表示

【80234】Re:他ブックのマクロを呼び出しているブ...
お礼  lea  - 18/11/5(月) 12:47 -

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

ありがとうございます!
その方法でやってみようと思います。
・ツリー全体表示

【80233】Re:他ブックのマクロを呼び出しているブ...
お礼  lea  - 18/11/5(月) 12:44 -

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

>ブックB.xlsmにデータ転記のマクロを記述し
>ブックA.xlsxのボタンに上記マクロを登録ではだめですか。

なるほど…Bのほうに記述するというのは考えてませんでした。
そうですね、外部マクロから呼び出すんだったらBから呼び出してもいいですもんね。
やってみます、ありがとうございます!
・ツリー全体表示

【80232】Re:他ブックのマクロを呼び出しているブ...
回答  γ  - 18/11/4(日) 13:15 -

引用なし
パスワード
   私もブックBにマクロを書けばよいと思いました。
ブックAが変わるたびにマクロをコピーするのは無駄でしょう。

ブックAで作業するとき、ブックA自身はActiveWorkbookで特定できるので、
コードに修正は不要ですし、
書込先はThisWorkBookで特定できます。
マクロをコピーしたりする手間は発生しませんし、
マクロは1つだけ作ればよいはずです。

ご指摘どおり、
ブックAのマクロボタンにブックBのマクロを登録すればよいだけです。
まあ、その手間は掛かりますけど。たいしたことじゃない。
・ツリー全体表示

【80231】Re:他ブックのマクロを呼び出しているブ...
発言  マナ  - 18/11/3(土) 12:46 -

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

ブックB.xlsmにデータ転記のマクロを記述し
ブックA.xlsxのボタンに上記マクロを登録ではだめですか。
・ツリー全体表示

【80230】Re:他ブックのマクロを呼び出しているブ...
発言  lea  - 18/11/3(土) 11:31 -

引用なし
パスワード
   もしかして、参照して…って書いたからですかね?

正確に言いますと、ブックAのあるシートで入力をして、別のシートと照らし合わせて、
最終的にブックBに記述を行う、という流れなんです。
作業ブックがAになるので、Aからボタンを押してマクロ実行はしたいです。
・ツリー全体表示

【80229】Re:他ブックのマクロを呼び出しているブ...
発言  lea  - 18/11/3(土) 11:17 -

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

ダメな理由、とはどういうことでしょう…??
普通はマクロを実行したいブックに記述するものではないのですか?
・ツリー全体表示

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