Excel VBA質問箱 IV

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

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


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

【78231】Re:下一桁を1あげるマクロ
回答  りった  - 16/6/1(水) 14:39 -

引用なし
パスワード
   数字として計算してからゼロ埋めするのはどうでしょう?

Sub test()
  Dim r As Range
  For Each r In Selection
    r = Right("000000" & (r + 1), 6)
  Next
End Sub


▼えり さん:
>001254
>004526
>009503
>   ・
>   ・
>   ・
>  続く
>
>このように1つの列に数字が並んでいる
>全てのセルは「文字列になってれいる
>
>数字の下1桁に➕1するしたい
>001255
>004527
>009504
>どのようなマクロを組めば良いでしょうか。
>ご教授下さい。
・ツリー全体表示

【78230】パワーポイントマクロとの連携
質問  りった  - 16/6/1(水) 14:30 -

引用なし
パスワード
         お世話になります。

リストと送り状フォーマットを元に、送り状を作りたいです。
・リストはExcelで、送り先やItemNo等が記載されています。
・送り状フォーマットはパワーポイントで、送り先やItemNo等の記入欄が有ります。
・送り状のファイルは一つで、中に100個ぐらいの送り状が入ります。

パワーポイントマクロはいまいち分かりませんが、スライドをコピーして新しいファイルを作ることは出来ました。
文字を変えるのも自力解決できるでしょう。(多分)

Excelマクロとパワーポイントマクロをどう連携させたら良いでしょうか?
Excelマクロからパワーポイントマクロの関数を呼べるのでしょうか?
でもその場合関数引数がものすごい数になってしまいますよね?

パワーポイント側からエクセルマクロを呼べるのでしょうか?
それが可能なら、件数取得関数と、n件目取得関数を作ればいいのかなと思いますが、
byRefの引数は使えるのでしょうか?
例:public sub getListData(byVal iNo as long, byRef sItemNo as String, byRef sAddress as String)

最悪、Excelでパワーポイントマクロのコードを作って、VBA エディタに貼り付けますが、それをやってしまうと他の人に作業を任せられなくなります。

尚、送り状フォーマットをExcelに取り込んで、Excelマクロ(よく使ってます)で作ろうとも思ったのですが、
パワーポイントファイル自体も提出必要なので、その方法は出来ません。
・ツリー全体表示

【78229】Re:下一桁を1あげるマクロ
発言  独覚  - 16/6/1(水) 14:25 -

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

=LEFT(A1,LEN(A1)-1)&VALUE(RIGHT(A1,1))+1
これだと
123499 --> 1234910
になってしまいませんか?

=LEFT(A1,LEN(A1)-1)&MOD(RIGHT(A1,1)+1,10)

=LEFT(A1,LEN(A1)-1)&RIGHT(RIGHT(A1,1)+1,1)
でどうでしょうか?
・ツリー全体表示

【78228】Re:WorksheetFunction
発言  γ  - 16/5/31(火) 22:38 -

引用なし
パスワード
   金曜の投稿からだいぶ経ちました。
どうして質問したまま放置するんでしょうか?
他の質問者さんは、回答があったら返事されていますよ。

忙しいなら忙しいなりに、少なくとも、
"拝見しました。時間をかけて考えてみます"の
ひと言くらい返すのが、人としての礼儀じゃないかな。

それほど忙しいのなら、
もっと適切なタイミングで質問したらどうですか?
コメントするのはこちらの勝手で、頼んだわけではない、
確かにその通りだが、それは放置して良いことにはならない。
そうは思わないか?

もっとたくさんの回答が来るまで待ってからまとめて返事をしよう、
ということなのか?
勘違いによるミスの話に、
それほどたくさんの回答が寄せられるはずもない。一人で十分だ。

回答者にとって、質問者がだんまりを決め込み、
回答が棚晒しにされることほど不快なことはない。
他の方のやりとりの仕方を学習してから質問して欲しい。
・ツリー全体表示

【78226】Re:下一桁を1あげるマクロ
発言  β  - 16/5/31(火) 17:08 -

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

最後の1桁のみを1アップするのか
( 123499 --> 123490 )
それにともなって全体を変えるのか
( 123499 --> 123500 )

後者なら、どういうことはないはずですので前者ですか?
つまり 数式でいえば A列に値があるとして
B1 に =LEFT(A1,LEN(A1)-1)&VALUE(RIGHT(A1,1))+1
これを下にフィルコピーしたような結果をマクロで作成したいということですか?

で、元の値を置換ですか?
それとも別の列に表示ですか?
・ツリー全体表示

【78225】下一桁を1あげるマクロ
質問  えり  - 16/5/31(火) 16:57 -

引用なし
パスワード
   001254
004526
009503
   ・
   ・
   ・
  続く

このように1つの列に数字が並んでいる
全てのセルは「文字列になってれいる

数字の下1桁に➕1するしたい
001255
004527
009504
どのようなマクロを組めば良いでしょうか。
ご教授下さい。
・ツリー全体表示

【78224】Re:プリントスクリーンを貼り付ける方法
お礼  へいへい  - 16/5/29(日) 22:46 -

引用なし
パスワード
   白紙になることなくペーストできました。ありがとうございます。スリープを使えばよかったんですね。すばらしい
・ツリー全体表示

【78223】Re:プリントスクリーンを貼り付ける方法
回答  γ  - 16/5/29(日) 20:16 -

引用なし
パスワード
   '    Do While .Busy = True
'      DoEvents
'    Loop
に代えて
    
    Do While .Busy Or .ReadyState <> READYSTATE_COMPLETE
       DoEvents
    Loop
    Sleep 1000
などとしてみては。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
も最初に追加してください。
・ツリー全体表示

【78222】プリントスクリーンを貼り付ける方法
質問  へいへい  - 16/5/29(日) 13:02 -

引用なし
パスワード
   ご教授お願いします。

ホームページをプリントスクリーンでコピーして、エクセルに張り付けるようにしたいのですが、以下では綺麗にコピーできる時と、白紙でコピーされる場合(おそらくコピーする段階で画面が開ききっていないことが原因)があり、使いものになりません。どうすれば、良いでしょうか?例えば、ホームページを立ち上げが完了したらコピー動作に移るようにしたいのですが。

Option Explicit
Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
  bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Declare Function GetVersionExA Lib "kernel32" _
   (lpVersionInformation As OSVERSIONINFO) As Integer
Public Type OSVERSIONINFO
  dwOSVersionInfoSize As Long
  dwMajorVersion As Long
  dwMinorVersion As Long
  dwBuildNumber As Long
  dwPlatformId As Long
  szCSDVersion As String * 128
End Type
Public Const KEYEVENTF_KEYUP = &H2
Public Const VK_SNAPSHOT = &H2C
Public Const VK_MENU = &H12
'==============================================================
Sub test()


  Dim blnAboveVer4 As Boolean
  Dim osinfo As OSVERSIONINFO
  Dim retvalue As Integer
  osinfo.dwOSVersionInfoSize = 148
  osinfo.szCSDVersion = Space$(128)
  retvalue = GetVersionExA(osinfo)
  
  If osinfo.dwMajorVersion > 4 Then blnAboveVer4 = True
  With CreateObject("InternetExplorer.Application")
  

    .Visible = True
    .Navigate "HTTPS:///・・・・・・・・"
    Do While .busy = True
     DoEvents
     Loop
    If blnAboveVer4 Then
     keybd_event VK_SNAPSHOT, 1, 0, 0
    Else
     keybd_event VK_MENU, 0, 0, 0
     keybd_event VK_SNAPSHOT, 0, 0, 0
     keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
     keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
     End If
    DoEvents
    .Quit
    End With
  With ActiveSheet
    Range("A1").Activate
    .Paste
    End With
End Sub
・ツリー全体表示

【78221】Re:WorksheetFunction
回答  γ  - 16/5/28(土) 5:50 -

引用なし
パスワード
   Range(Cells(3, 3), Cells(3, 13))

Range("B3:B13")の代替と考えているなら、
単純ミスです。
Cells(行,列)ですから。

まあ、先のコメントは決して無駄にはならないと思う。
理解して使えるようにしておくと良いと思う。
・ツリー全体表示

【78220】Re:WorksheetFunction
回答  γ  - 16/5/28(土) 5:01 -

引用なし
パスワード
   (1)まず入力3は、Range(Cells(15,3))の部分が間違い。
こういう書き方はありません。単に、Cells(15,3)でしょう。

(2)入力2 は、実際にマッチするものがないのでしょう。

こうした場合、WorksheetFunction.Matchでは実行時エラーが発生します。
エラー処理が必要となります。
詳細は、例えば↓の記事を参考にしてください。
ht tps://www.moug.net/tech/exvba/0100004.html

別の方法として、Application.Matchを使う方法があります。
この場合は実行時エラーにはならず、IsErrorだけで判定できるので、
どちらかといえば、こちらのほうが記述は容易になります。
詳細は、例えば↓の記事を参考にしてください。
ht tps://www.moug.net/tech/exvba/0100035.html
・ツリー全体表示

【78219】WorksheetFunction
質問  TODD  - 16/5/27(金) 22:34 -

引用なし
パスワード
   お世話になりますあ。
WorksheetFunctionについてご質問させて下さい。

入力1では、msgboxに数値が返されますが、入力2・入力3ではエラーとなります。
WorksheetFunctionのMatchでは、入力2・入力3ようにCellsは使用できないのでしょうか?

入力1
Dim matchFig As Integer
matchFig = WorksheetFunction.Match(Range("C15"), Range("B3:B13"), 0)
MsgBox matchFig
→動作する

入力2
matchFig = WorksheetFunction.Match(Range("C15"), Range(Cells(3, 3), Cells(3, 13)), 0)
→動作しない

入力3
Dim matchFig As Integer
matchFig = WorksheetFunction.Match(Range(cells(15,3)), Range("B3:B13"), 0)
MsgBox matchFi
→動作しない

ご確認宜しくお願い致します。

以上
・ツリー全体表示

【78218】Re:実行時エラー13 型が一致しません
発言  助けて  - 16/5/27(金) 17:47 -

引用なし
パスワード
   すいません。。。
エラーの発生源がわかり自己解決しました。。。(エラー発生源が予想と違かった)

しかし別の問題が発生しました!
vlookup関数を冒頭のセルにコピーして処理領域のある行のセルすべてに貼り付けてるんですけども、
相対参照されないで、出てくるのですが
セルの中身をいざみると相対参照されていて、1回セルのデータを選択してエンターを押すと相対参照になります。
どういったことが原因なのでしょうか。
・ツリー全体表示

【78217】Re:実行時エラー13 型が一致しません
発言  独覚  - 16/5/27(金) 14:28 -

引用なし
パスワード
   ▼助けて さん:

回答ではないけれども。

VBエディタの「ツール」-「オプション」で「全般」タブの「エラートラップ」を
「エラー発生時に中断」にした場合もエラー発生個所は同じでしょうか?


なお、確認後はエラートラップのチェック箇所をもとに戻しておいてください。
・ツリー全体表示

【78216】Re:実行時エラー13 型が一致しません
発言  助けて  - 16/5/27(金) 12:03 -

引用なし
パスワード
   実行時エラー '13':
型が一致しません

と出ます。
・ツリー全体表示

【78215】Re:実行時エラー13 型が一致しません
発言  助けて  - 16/5/27(金) 11:48 -

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

Next iでループは回ることは確認しております。
しかし、iに関するループが回った後、エラーが表示されます。


処理領域の次の行のセルに書き込むのは合ってます。
・ツリー全体表示

【78214】Re:実行時エラー13 型が一致しません
発言  β  - 16/5/27(金) 11:43 -

引用なし
パスワード
   ▼助けて さん:

コードは詳細に読んでいないのですが、エラーが発生するコードは

Next i

ですか?

それとも他のコードですか?
他のコードだとすると、どれはどのコードですか?

で、その時のエラー番号とエラーメッセージの内容を
正確にアップしてください。

ちなみに、要件はわかりませんけど、ループを抜けた後の処理、

    If number = 0 Then
      Cells(j, i).Value = 0
    Else
      MsgBox score / number
      Cells(j, i).Value = score / number
    End If

ここで相手にしている i や j は、処理領域の最後の行の次の行、
処理領域の最後の列の次の列ですけど、それはいいのですね?
・ツリー全体表示

【78213】実行時エラー13 型が一致しません
質問  助けて  - 16/5/27(金) 11:22 -

引用なし
パスワード
   お世話になります。

下記のマクロを作ったのですが、コメントアウトしたところでエラーが発生してしまいます。
しかもiに関してのForループが回った後です。なぜかわかりますか??


Sub ネガポジ()

Dim i As Integer ' 変数
Dim score As Double
Dim number As Double
Dim j As Integer
Dim m As Integer
Dim s As Integer
score = 0
number = 0


i = 2


Rows(2).Insert ' 行を挿入
Rows(3).Insert
Do While Cells(1, i) <> ""
  Cells(2, i) = StrConv(Cells(1, i), vbKatakana) '単語をカタカナに変換
  Cells(3, i) = StrConv(Cells(1, i), vbHiragana) ' 単語を平仮名に変換
  i = i + 1
 
  Loop
i = 3
Rows(6).Insert
Rows(7).Insert
Rows(8).Insert
Cells(6, 2).Value = "=VLOOKUP(B1,データベース!$A$1:$D$60000,4,False)" ' スコアの表示
Cells(7, 2).Value = "=VLOOKUP(B2,データベース!$B$1:$D$60000,3,False)"
Cells(8, 2).Value = "=VLOOKUP(B3,データベース!$B$1:$D$60000,3,False)"
Do While Cells(1, i) <> ""
 Cells(6, i - 1).Copy Cells(6, i)
  Cells(7, i - 1).Copy Cells(7, i)
  Cells(8, i - 1).Copy Cells(8, i)
  i = i + 1
 Loop
  m = Cells(Rows.Count, "A").End(xlUp).Row
  s = Cells(9, Columns.Count).End(xlToLeft).Column
For j = 9 To m
score = 0
number = 0
For i = 2 To s
 If Cells(j, i).Value > 0 Then
  If Application.WorksheetFunction.IsError(Cells(6, i)) = False Then
    score = score + Cells(6, i).Value * Cells(j, i).Value
    number = number + Cells(j, i).Value
  ElseIf Application.WorksheetFunction.IsError(Cells(7, i)) = False Then
       score = score + Cells(7, i).Value * Cells(j, i).Value
       number = number + Cells(j, i).Value
  ElseIf Application.WorksheetFunction.IsError(Cells(8, i)) = False Then
       score = score + Cells(8, i).Value * Cells(j, i).Value
       number = number + Cells(j, i).Value
    Else
    End If
    End If
    Next i  'なぜかForループが終わったときにエラーを吐く。
    If number = 0 Then
      Cells(j, i).Value = 0
    Else
    MsgBox score / number
    Cells(j, i).Value = score / number
    End If
    Next j
    
  Cells(9, i - 1).Copy
  Cells(9, i).PasteSpecial
  Cells(9, i - 1).Value = ""
  Cells(8, i).Value = "ネガポジ分析結果"


End Sub
・ツリー全体表示

【78212】Re:セルの範囲を1行に羅列させる
お礼  倒ビン対策  - 16/5/26(木) 15:39 -

引用なし
パスワード
   早速ご回答有難うございます。
小文字のlは消し忘れが一つありました。
そしてjとiは入れ替えてズバリ正解で本当に助かりました。
有難うございます。
・ツリー全体表示

【78211】Re:セルの範囲を1行に羅列させる
発言  独覚  - 16/5/26(木) 13:25 -

引用なし
パスワード
   ▼倒ビン対策 さん:
Withtを指定しているのにその後使っていないとか
>l = 0
この「l」(Lの小文字)って「i」の間違い?
とかインデントがむちゃくちゃとかは置いといて。

エラーの原因は
>.Cells(DSLastRow + 1, m).Value = SaleAry(j, i)
のjとiが逆では?

あるいは
>For j = 1 To b
>  For i = 1 To a
のaとbが逆か。
・ツリー全体表示

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