Excel VBA質問箱 IV

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

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


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

【78412】Re:ダブルクォーテーション置換
発言  β  - 16/9/13(火) 21:50 -

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

アップされたコード、まだ目を通していません。
明日以降、時間が取れたら眺めてみますけど、それとは別に

β - 16/9/13(火) 11:34 -

でコメントしたテスト、やっていただけましたか?
で、その結果は、納得ができるものではなかったということですか?
・ツリー全体表示

【78411】Re:ダブルクォーテーション置換
発言  はてなな  - 16/9/13(火) 13:38 -

引用なし
パスワード
   ダブルクォーテーションをシングルクォーテーションに変更したい

変換前は半角ダブルで
返還後は全角シングルへ
Sub 置換()
 Dim mystr(1, 32) As String
 
   mystr(0, 0) = "MI"
   mystr(1, 0) = "M I"
  
   mystr(0, 1) = "NI"
   mystr(1, 1) = "N I"
  
   mystr(0, 2) = "GA"
   mystr(1, 2) = "G A"
  
   mystr(0, 3) = "SI"
   mystr(1, 3) = "S I"
  
   mystr(0, 4) = "RI"
   mystr(1, 4) = "R I"
  
   mystr(0, 5) = ":〜"
   mystr(1, 5) = ":   〜"
  
   mystr(0, 6) = "OW"
   mystr(1, 6) = "O W"
  
   mystr(0, 7) = "7WV"
   mystr(1, 7) = "7 WV"
  
   mystr(0, 8) = "1WV"
   mystr(1, 8) = "1 WV"
  
   mystr(0, 9) = ".."
   mystr(1, 9) = "."
  
   mystr(0, 10) = "H."
   mystr(1, 10) = "H ."
  
   mystr(0, 11) = "N."
   mystr(1, 11) = "N ."
  
   mystr(0, 12) = "M."
   mystr(1, 12) = "M ."
  
   mystr(0, 13) = "G."
   mystr(1, 13) = "G ."
  
   mystr(0, 14) = "'"
   mystr(1, 14) = "’"
  
   mystr(0, 15) = "HW"
   mystr(1, 15) = "H W"
  
   mystr(0, 16) = "TK."
   mystr(1, 16) = "TK ."
  
   mystr(0, 17) = "L."
   mystr(1, 17) = "L ."
  
   mystr(0, 18) = "UD"
   mystr(1, 18) = "U D"
  
   mystr(0, 19) = "UM"
   mystr(1, 19) = "U M"
  
   mystr(0, 20) = "MA"
   mystr(1, 20) = "M A"
  
   mystr(0, 21) = "ND"
   mystr(1, 21) = "N D"
  
   mystr(0, 22) = "HA"
   mystr(1, 22) = "H A"
  
   mystr(0, 23) = "AM"
   mystr(1, 23) = "A M"
  
   mystr(0, 24) = "RA"
   mystr(1, 24) = "R A"
  
   mystr(0, 25) = "G/"
   mystr(1, 25) = "G /"
  
   mystr(0, 26) = "M/"
   mystr(1, 26) = "M /"
  
   mystr(0, 27) = "HU"
   mystr(1, 27) = "H U"
  
   mystr(0, 28) = "(P"
   mystr(1, 28) = "( P"
  
   mystr(0, 29) = "E ."
   mystr(1, 29) = "E."
  
   mystr(0, 30) = "SC"
   mystr(1, 30) = "S C"
  
   mystr(0, 31) = "CLR ."
   mystr(1, 31) = "CLR."


   mystr(0, 32) = """"
   mystr(1, 32) = "’’"
  
  
 Call 配列置換(mystr)
 
End Sub
=====================================
Sub 配列置換(ByRef mystr() As String) '配列置換
Dim i As Long
Dim jj
  
  ' On Error GoTo logout
  Application.ScreenUpdating = False
  
  With chhani
    'Debug.Print "置換" & ActiveWorkbook.name, ActiveSheet.name
    
    For i = 0 To UBound(mystr, 2)
      .NumberFormatLocal = "@"
      .Cells = Application.Substitute(.Cells, mystr(0, i), mystr(1, i))
    Next i
  End With
  
  For Each jj In chhani
     jj.Value = RTrim$(jj.Value)
     jj.Value = LTrim$(jj.Value)
  Next jj
 

End Sub


いろんなコードとくっついているので、これくらいで。
 Set chhani = .UsedRange
chhaniはシート全面にかかると思って下さい。


****ここの部分がうまく反映されないです。セルの先頭に来るときに。

   mystr(0, 32) = """"
   mystr(1, 32) = "’’"


わかりにくくてすみません。
・ツリー全体表示

【78410】Re:ダブルクォーテーション置換
発言  β  - 16/9/13(火) 11:34 -

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

>以下のケースだと
>そのセル.Value= "'" & 変換文字列
>
>今までと変わりません。
>
>"'" & "’ '"としても

まず、セットしているコードをそのまま正確にアップしてもらえませんか?

私が誤解したんでしょうかね、「"A" & "B" 」という文字列のことだと思っていたんですが?

それと変換前の " は 半角記号ですね。
変換後の ' も 半角記号ですね。

変換しても、見た目は変わりませんけど、変換したいんですよね?

Sub Test()
  Dim s As String
  
  s = """A"" & ""B"""
  
  MsgBox "今から " & s & " を変換して A1 と A2 に書きこみます"
  
  Range("A1").Value = Replace(s, """", "''")
  Range("A2").Value = "'" & Replace(s, """", "''")
  
End Sub


もし、私の勘違いでなければ
・ツリー全体表示

【78409】Re:ダブルクォーテーション置換
発言  はてなな  - 16/9/13(火) 11:23 -

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

セルに入力する文字列の先頭の ' (シングルクォーテーション) は、文字列なんだよと
エクセルに強制的に認識させる制御文字になります。


は理解しております。


文字として
"A" & "B"を
' 'A' ' & ' ' B' ' に変更したいです。


以下のケースだと
そのセル.Value= "'" & 変換文字列

今までと変わりません。

"'" & "’ '"としても
・ツリー全体表示

【78408】Re:ダブルクォーテーション置換
発言  β  - 16/9/13(火) 10:42 -

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

セルに入力する文字列の先頭の ' (シングルクォーテーション) は、文字列なんだよと
エクセルに強制的に認識させる制御文字になります。

たとえば セルに 'ABC と 4桁打ち込んで =LEN(そのセル) とやると、4 ではなく 3 になりますね。

なので、

そのセル.Value= "'" & 変換文字列

こうしたらいかがでしょうか。
・ツリー全体表示

【78407】ダブルクォーテーション置換
質問  はてなな  - 16/9/13(火) 10:30 -

引用なし
パスワード
   ダブルクォーテーション置換

vbaで、

"A" & "B"を
' 'A' ' & ' ' B' ' に変更したいです。

セルの先頭のクォーテーションが変換できません。
以下になります。

 A' ' & ' ' B' '


どうしたらいいですか?

""""を
"' '"に置換してます。
・ツリー全体表示

【78406】Re:エクセルからの削除、リネーム後の保存
発言  β  - 16/9/13(火) 8:21 -

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

ファイルの移動であれば、開かなくても、VBA標準機能の Name ステートメント
あるいは FSO の ファイルオブジェクト.Move メソッドやファイルオブジェクト.MoveFIleメソッドで
直接移動処理が可能です。
・ツリー全体表示

【78405】エクセルからの削除、リネーム後の保存
質問  Todd  - 16/9/13(火) 6:53 -

引用なし
パスワード
   お世話になっております。
下記のエクセル操作についてご相談させて下さい。

エクセルより.txtデータを読み込み、読み込み後
元の.txtデータをリネーム(名前:after 日付け、保存時間)し、
別フォルダに保存。この際、もとの.txtデータは削除する
というマクロを作成したいと考えております。

.txtデータの読み込みまでは出来ましたが、
その後はどのように作成すればよいか、お知恵を拝借できれば幸いです。

宜しくお願い致します。

以上
・ツリー全体表示

【78404】表をPPTに貼り付ける際のオブジェクト名...
質問  nao  - 16/9/12(月) 15:53 -

引用なし
パスワード
   グラフと表をPPTに貼り付けたいのですが、グラフは貼り付けられるのですが
表が貼り付けられずエラーになります。

Sub Prop(New_Name As String, New_GrpFlg As Boolean, New_SldNmb As Integer, _
     New_Top As Single, New_Left As Single, New_Width As Single, New_Height As Single, New_Odr As Integer)
    
    
 'インスタンス生成
 With New Class1
  .Name = New_Name 'オブジェクト名
  .GrpFlg = New_GrpFlg '図表フラグ
  .SldNmb = New_SldNmb 'スライド番号
  .Top = New_Top '上からの位置
  .Left = New_Left '左からの位置
  .Width = New_Width '横幅
  .Height = New_Height '横幅
  .Odr = New_Odr '順番
  Objs.Add .Self 'Objsコレクションに追加
 End With
End Sub


Call Prop("グラフ 12", True, 18, 4.53 * 28.35, 0.56 * 28.35, 11.3 * 28.35, 10.02 * 28.35, 0)
 Call Prop("グラフ 13", True, 19, 3.63 * 28.35, 28.35, 23.6 * 28.35, 12.23 * 28.35, 0)
 Call Prop("グラフ 14", True, 22, 3.23 * 28.35, 0, 15.23 * 28.35, 15.82 * 23.85, 0)
 Call Prop("テーブル3", False, 14, 3.65 * 28.35, 13.03 * 28.35, 11.47 * 28.35, 11.54 * 28.35, 0)
 Call Prop("deta2", False, 16, 3.65 * 28.35, 13.03 * 28.35, 11.47 * 28.35, 8.2 * 28.35, 0)
 Call Prop("AI17:AL20", False, 18, 3.65 * 28.35, 13.03 * 28.35, 11.48 * 28.35, 4.86 * 28.35, 0)

On Error GoTo ERROR_HANDLER

 Set ppApp = CreateObject("PowerPoint.Application")
 Set ppPst = ppApp.ActivePresentation

 Dim Obj As Class1
 For Each Obj In Objs
  '指定範囲をクリップボードにコピー
  If Obj.GrpFlg = True Then
   'グラフの場合
   ThisWorkbook.Sheets(ShtNam).ChartObjects(Obj.Name).Copy
  Else
   '表の場合
   ThisWorkbook.Sheets(ShtNam).ChartObjects(Obj.Name).CopyPicture xlScreen, xlPicture

  End If
  'PowerPointスライド指定
  Set ppSld = ppPst.Slides(Obj.SldNmb)
  '貼り付け
  ppSld.Shapes.Paste

テーブル名、名前の定義、範囲選択と試したのですが
いずれも、『指定した名前のアイテムが見つかりませんでした。』とエラーになります。
表の場合、どのように書けば取れますでしょうか?
・ツリー全体表示

【78403】Re:グラフを既存PPTに複数貼り付けたい
お礼  nao  - 16/9/12(月) 15:43 -

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

有難うございます。
・ツリー全体表示

【78402】Re:グラフを既存PPTに複数貼り付けたい
発言  マナ  - 16/9/10(土) 9:55 -

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

>ちょっとまだ苦戦してますが配列使ってやってみようと思います。

グラフ挿入するsubプロシージャを作成し、
変化する部分は、引数で指定するとよいかもしれません。
・ツリー全体表示

【78401】Re:グラフを既存PPTに複数貼り付けたい
お礼  nao  - 16/9/9(金) 16:09 -

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

有難うございます!
確かに変数もれてました。
ちょっとまだ苦戦してますが配列使ってやってみようと思います。

アドバイス有難うございました!
・ツリー全体表示

【78400】Re:グラフを既存PPTに複数貼り付けたい
発言  マナ  - 16/9/8(木) 23:54 -

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

>↓ですと、上しかループせず2枚のPPTにたくさんグラフが貼り付けられてしまいます。


パワーポイントは、まったくわかりませんので、参考程度に。
下のループで、変数名の修正もれがあるような気がします。
・ツリー全体表示

【78399】Re:VBAでExcelグラフをPPTに貼り付け
発言  nao  - 16/9/8(木) 17:32 -

引用なし
パスワード
   28.35をかけることで解決しました。
・ツリー全体表示

【78398】グラフを既存PPTに複数貼り付けたい
質問  nao  - 16/9/8(木) 17:21 -

引用なし
パスワード
   初心者です。
ExcelグラフをPPTに貼り付けるのですが、位置やサイズが違うため似たような処理を書かなくては成りません。
↓ですと、上しかループせず2枚のPPTにたくさんグラフが貼り付けられてしまいます。
やりたいのは、PPTのページによってグラフの位置やサイズを変えて貼り付けたいです。位置やサイズの取得は出来ているようです。PPTのページが11ページ、12ページにいってくれません。
どのように書けばいいのかご教示ください。

Sub select_CopyToPPT()
 Dim ppApp As Object 'PowerPointアプリ
 Dim ppPst As Object 'PowerPointプレゼン
 Dim ppSld As Object 'PowerPointスライド
 Dim n As Integer, shp As Object
 Dim PecNmb As Integer, ShtNam As Variant, GrpNmb As Variant, SldNmb As Variant
 Dim PecNmb2 As Integer, ShtNam2 As Variant, GrpNmb2 As Variant, SldNmb2 As Variant

 '処理したいExcelグラフの数
 PecNmb = 2
 'コピーしたいExcelグラフが存在するシート名
 ShtNam = Array("グラフ", "グラフ")
 'コピーしたいExcelグラフの名前
 GrpNmb = Array("グラフ 4", "グラフ 6")
 '貼り付け先PowerPointのスライド番号
 SldNmb = Array(7, 8)

 On Error GoTo ERROR_HANDLER

 Set ppApp = CreateObject("PowerPoint.Application")
 Set ppPst = ppApp.ActivePresentation

 For n = 0 To PecNmb - 1
  '指定範囲をクリップボードにコピー
  Sheets(ShtNam(n)).ChartObjects(GrpNmb(n)).Copy
  'PowerPointスライド指定
  Set ppSld = ppPst.Slides(SldNmb(n))
  '貼り付け
  ppSld.Shapes.Paste

  '位置・サイズを補正
  With ppSld.Shapes(ppSld.Shapes.Count) '最終シェイプを処理
   '.LockAspectRatio = msoTrue '縦横比固定
   .Top = 5.2 * 28.35 '上からの位置
   .Left = 0.9 * 28.35 '左からの位置
   .Width = 23.64 * 28.35 '横幅
   .Height = 10.42 * 28.35 '縦幅
   .ZOrder msoSendToBack '最背面へ移動
  End With
  flg = False 'フラグリセット
 Next n


 '処理したいExcelグラフの数
 PecNmb2 = 2
 'コピーしたいExcelグラフが存在するシート名
 ShtNam2 = Array("グラフ", "グラフ")
 'コピーしたいExcelグラフの名前
 GrpNmb2 = Array("グラフ 7", "グラフ 8")
 '貼り付け先PowerPointのスライド番号
 SldNmb2 = Array(11, 12)

 On Error GoTo ERROR_HANDLER

 Set ppApp = CreateObject("PowerPoint.Application")
 Set ppPst = ppApp.ActivePresentation

 For n = 0 To PecNmb - 1
  '指定範囲をクリップボードにコピー
  Sheets(ShtNam(n)).ChartObjects(GrpNmb(n)).Copy
  'PowerPointスライド指定
  Set ppSld = ppPst.Slides(SldNmb(n))
  '貼り付け
  ppSld.Shapes.Paste

  '位置・サイズを補正
  With ppSld.Shapes(ppSld.Shapes.Count) '最終シェイプを処理
   '.LockAspectRatio = msoTrue '縦横比固定
   .Top = 2.9 * 28.35 '上からの位置
   .Left = 0 * 28.35 '左からの位置
   .Width = 12.58 * 28.35 '横幅
   .Height = 10.85 * 28.35 '縦幅
   .ZOrder msoSendToBack '最背面へ移動
  End With
  flg = False 'フラグリセット
 Next n
 
TERMINATE:
 On Error GoTo 0
 Set ppApp = Nothing
 Set ppPst = Nothing
 Set ppSld = Nothing
 Exit Sub

ERROR_HANDLER:
 MsgBox Err.Description, vbCritical
 Resume TERMINATE


End Sub
・ツリー全体表示

【78397】VBAでExcelグラフをPPTに貼り付け
質問  nao  - 16/9/8(木) 15:50 -

引用なし
パスワード
   VBA殆ど初心者です。
グラフをPPTへの貼り付け方はわかったのですが、既存のPPTにグラフを置く位置指定をしたいんですが、どのように書けばいいんでしょうか?

PPTのほうでcmの位置はわかるのですが下のように書くと表示されません。
まさかcmを書いてもエラーになるし

.Top = 5.2 '上からの位置
.Left = 0.9 '左からの位置
.Width = 23.6 '横幅


.Top = 100 '上からの位置
   .Left = 60 '左からの位置
   .Width = 600 '横幅
こう書いた場合には表示はされますが、思った位置に表示されません。
どのように書くのがいいのでしょうか?
・ツリー全体表示

【78396】Re:Iframe内のリンクを指定出来ない
発言  γ  - 16/8/8(月) 20:41 -

引用なし
パスワード
   ご存じだと思いますが、VBAからIEを操作する関係は、
↓のサイトが有用です。
ht tp://www.ken3.org/cgi-bin/group/vba_ie.asp

frame関連は下記です。
ht tp://www.ken3.org/cgi-bin/group/vba_ie_frame.asp
ここらあたりを勉強されたらいかがでしょうか。

これだけだと何ですから、上記をもとにリンク先取得のコードを
書いてみました。

# あなたの場合にうまくいくかは不明です。
# こちらでテストした限りはOKでしたが、サイトにより色々な作り方がありますので。

-----------
Sub ie_frame()
  
  Dim objIE  As InternetExplorer  'IEオブジェクト参照用

  Set objIE = CreateObject("InternetExplorer.application")
  objIE.Visible = True

  objIE.Navigate "ht tp://・・・・" ' 対象となるサイトページ

  '表示終了まで待つ
  Do While objIE.Busy = True
    DoEvents
  Loop

  Dim objFRAME As FramesCollection
  Set objFRAME = objIE.Document.frames 'フレームの代入

  Debug.Print "フレームの数は" & objFRAME.Length

  'ドキュメントオブジェクトの代入
  Dim objDOC  As HTMLDocument   'HTMLドキュメント
  Set objDOC = objFRAME(0).Document 'フレームのドキュメントをセット

  Debug.Print objDOC.Links(0).href 'リンク先のurlを出力

End Sub
・ツリー全体表示

【78395】Re:フォームのTextBoxをフォーカス時に選...
発言  β  - 16/8/8(月) 14:03 -

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

連投失礼。

もし、ユーザーフォームだとして

>Enterイベントの処理が走った後に、クリックが最後にきているから?

この意味がよくわかりませんが CommandButton 等のクリックと、この話はどう関連してくるのでしょうか?

それと、このユーザーフォーム表示はモーダルですか、モードレスですか?
・ツリー全体表示

【78394】Re:フォームのTextBoxをフォーカス時に選...
発言  β  - 16/8/8(月) 13:58 -

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

もしかして・・・
フォームコントロールというのは ユーザーフォームの話でしょうか??
・ツリー全体表示

【78393】Re:フォームのTextBoxをフォーカス時に選...
発言  β  - 16/8/8(月) 13:52 -

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

コメントしたように、いまいち、やりたいことがわからないのですが

たとえば標準モジュールに以下のマクロを書いておき、フォームツールのテキストボックスに
このマクロを、マクロ登録する ということなんでしょうか?

Sub Test()
  ActiveSheet.Shapes(Application.Caller).TextFrame2.TextRange.Characters.Select
End Sub
・ツリー全体表示

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