Excel VBA質問箱 IV

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

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


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

【75093】Re:シートを比較して同じだったら記号を...
お礼  hama E-MAIL  - 13/12/10(火) 19:00 -

引用なし
パスワード
   ▼kanabun さん:
無事完成しました。ありがとうございました。
例のコメントを見て勘違いしました。
100行も書かずそのままいけました。
本当にありがとうございました。
・ツリー全体表示

【75092】添付ファイルのつけ方
質問  せんど  - 13/12/10(火) 18:04 -

引用なし
パスワード
   こんにちわ!!

メール画面を呼び出し、
宛名・件名・本文までを呼び出すことはできたのですが
ここに添付ファイルをつけたいのです。


Sub メール作成()


Dim sAddr As String
  Dim sBody As String
  Dim sSubj As String
  Dim sComd As String
  Dim Body As String
  Dim sSend As String
  

xMonth = Format(Date, "(MM月)")
 Body = Sheets("仮シート").Range("B4").Value & "%0d%0a" & _
Sheets("仮シート").Range("B5").Value & "%0d%0a" & _
Sheets("仮シート").Range("B6").Value & "%0d%0a" & _
Sheets("仮シート").Range("B7").Value & "%0d%0a" & _
Sheets("仮シート").Range("B8").Value & "%0d%0a" & _
Sheets("仮シート").Range("B9").Value & "%0d%0a" & _
Sheets("仮シート").Range("B10").Value & "%0d%0a" & _
Sheets("仮シート").Range("B11").Value & "%0d%0a" & _
Sheets("仮シート").Range("B12").Value & "%0d%0a" & _
Sheets("仮シート").Range("B13").Value & "%0d%0a" & _
Sheets("仮シート").Range("B14").Value & "%0d%0a" & _
Sheets("仮シート").Range("B15").Value & "%0d%0a" & _
Sheets("仮シート").Range("B16").Value & "%0d%0a" & _
Sheets("仮シート").Range("B17").Value & "%0d%0a" & _
Sheets("仮シート").Range("B18").Value & "%0d%0a" & _
Sheets("仮シート").Range("B19").Value & "%0d%0a" & _
Sheets("仮シート").Range("B20").Value & "%0d%0a" & _
Sheets("仮シート").Range("B21").Value & "%0d%0a" & _
Sheets("仮シート").Range("B22").Value & "%0d%0a" & _
Sheets("仮シート").Range("B23").Value & "%0d%0a" & _
Sheets("仮シート").Range("B24").Value & "%0d%0a"


sAddr = "+++++@+++++.co.jp";
sSubj = "ポイント" & xMonth
sBody = Body

sComd = "Mailto:" & sAddr & "?Subject=" & sSubj & "&Body=" & sBody
Debug.Print sComd
CreateObject("WScript.Shell").Run sComd

End Sub

教えていただければ幸いです。
よろしくお願い致します。
・ツリー全体表示

【75091】Re:ファイル検索とリンク設定
お礼  kohaku  - 13/12/10(火) 16:32 -

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

再度ご教授頂き、お手数をお掛けいたしました。
お陰様で実現可能になりました。

VBAは奥深く色々な事が出来ると思いますので、
勉強していきます。
ありがとうございました。
・ツリー全体表示

【75090】Re:マクロで、セルに色をつけたいです。
回答  [名前なし]  - 13/12/10(火) 16:31 -

引用なし
パスワード
   A以外のグループの条件がよくわかりませんので・・
それぞれの範囲ごとに色を付けるしかないのでは??
それぞれのグループに範囲名をつけるとして
(範囲名を付けない場合はRange("b10:k19") やRange(Range("b10"), Range("b10").Offset(10, 10))としてください)
Sub macro2()
  Dim rng As Range
  Dim rcolor()
  rcolor = Array(RGB(1, 128, 255), RGB(0, 255, 255), RGB(204, 255, 204), RGB(75, 255, 75), _
           RGB(255, 255, 153), RGB(255, 255, 0), RGB(255, 204, 0), _
          RGB(255, 153, 0), RGB(255, 102, 0), RGB(255, 0, 0))
  For Each rng In Range("Aグループ")
  'For Each rng In Range(Range("b10"), Range("b10").Offset(10, 10))
    Select Case rng.Value
    Case 1 To 99
      rng.Interior.Color = rcolor(Int(rng.Value / 10))
    Case 100
      rng.Interior.Color = rcolor(9)
    Case Else
      rng.Interior.Color = RGB(255, 255, 255)
    End Select
  Next
  For Each rng In Range("Bグループ")
    Select Case rng.Value
    Case 10 To 19
      rng.Interior.Color = rcolor(1)
    Case 20 To 34
      rng.Interior.Color = rcolor(2)
    '・
    '・
    Case 130 To 150
      rng.Interior.Color = rcolor(9)
    Case Else
      rng.Interior.Color = RGB(255, 255, 255)
    End Select
  Next
End Sub
カラーは適当につけましたがセルに見本をおいて
  rcolor = Array(Range("A1").Interior.Color,Range("A2").Interior.Color ・・・)
とした方がいいかも。
・ツリー全体表示

【75089】エクセルファイルのデスクトップへの移動
質問  ggg  - 13/12/10(火) 15:28 -

引用なし
パスワード
   C:にあるフォルダ[testFD]のファイル[a.xls] をデスクトップに移動し[a.xls]を閉じるタイミングで元のフォルダ[testFD]に戻すプログラムを次の通り作成しました。どこが不具合なのか分からないのですがこのプログラムでは[a.xls]が閉じずに意図した作動になりません。ご教示のほどよろしくお願いします。


test.xls
Module1:デスクトップの移動と戻し

Option Explicit

Const myHolderName = "C:\testFD\"
Public dsktopPath As String

Public Sub Pathdsktop()
'DeskTop Pathを取得する
Dim WSH As Variant
Set WSH = CreateObject("Wscript.shell")
dsktopPath = WSH.specialfolders("DeskTop") & "\"
End Sub

Public Sub MoveMyfile(myname)

 'フォルダtestFD"C:\testFD\")のExcelファイルを
 'DeskToに移動する

Dim moveFile As String, motoFile As String, msg1 As String

 Pathdsktop
 moveFile = dsktopPath & myname
 motoFile = myHolderName & myname
 
If Dir(moveFile) = "" Then '"byotoname"がデスクトップない時
  Name motoFile As moveFile
  Workbooks.Open moveFile
  MsgBox myname & " は開かれましたよ! "
Else
 '"byotonameがデスクトップに移動済
  msg1 = myname & "は開かれていますよ!"
  MsgBox msg1 
End If
End Sub


Public Sub CloseMyfile(myname)

'DeskToに移動に移動したのExcelファイを操作した後
'元のフォルダtestFDに移動する

Dim moveFile As String, motoFile As String, msg3 As String

Pathdsktop
moveFile = dsktopPath & myname '
motoFile = myHolderName & myname '

On Error GoTo dbg:

Name moveFile As motoFile
 
msg3 = "お疲れさまでした〜" 
MsgBox msg3
Unload UserForm2

Exit Sub

dbg:

  msg3 = myname & "は閉じられていませんよ!"
  MsgBox msg3
  Unload UserForm2 
End Sub

test.xls
userform2
a.xlsの開閉


Option Explicit

Private Sub CommandButton2_Click() 'Open
Dim myname As String
myname = "a.xls"
MoveMyfile myname
Unload Me

ThisWorkbook.Close
End Sub

Private Sub CommandButton12_Click() 'Close
 Dim myname As String
 myname = "a.xls" '
 CloseMyfile myname

 ThisWorkbook.Close
End Sub

a.xls
ThisWorkbook

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)

 Dim moveFD As String, byotoname As String
 
 moveFD = "C:\testMove\"
 Workbooks.Open moveFD & "test.xls"
 
 MsgBox "[a-Close]ボタンをクリックして下さい"
 
 ThisWorkbook.Save

End Sub
・ツリー全体表示

【75088】Re:ファイル検索とリンク設定
発言  kanabun  - 13/12/10(火) 13:12 -

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

失礼しました。見過ごしていました m(_ _)m

>仕様のバージョンアップが必要となり、悩んでおります。
>
>追加仕様:
>セルの内容: 12345*  -->  実際のファイル名: 123451.pdf
>上記のようなPDFファイルは1個しか存在しないことは分かっています。

>■配列の中身を曖昧検索するには、どのように記述すればよいのでしょうか?

ワークシート関数のMATCHを使って、配列のワイルドカードを使った検索が
できますので、セルの値に * が含まれていたら、Match関数で実在する
123451.pdf
の位置を求め、フルパスを取得したらどうでしょうか?


Sub Try1() の以下の部分を修正してみましたから、
これを応用してそちらのコードを修正してみてください。

  'シートのA列のファイル名が辞書にあればそのパス名を取得します
  Dim fArray
  fArray = dic.Keys()

  Dim r As Range
  Dim m, v As Variant
  Set r = Range("A2", Cells(Rows.Count, 1).End(xlUp))
  v = r.Value
  For i = 1 To UBound(v)
    s = v(i, 1) & ".pdf"
    If InStr(s, "*") Then
      m = Application.Match(s, fArray, 0)
      If IsNumeric(m) Then
        v(i, 1) = dic(fArray(m))
      Else
        v(i, 1) = ""
      End If
    ElseIf dic.Exists(s) Then
      v(i, 1) = dic(s) 'そのファイルのあるパス名
    Else
      v(i, 1) = ""
    End If
  Next
  'シートのB列に検索結果を貼り付ける
  r.Offset(, 1).Value = v
・ツリー全体表示

【75087】Re:シートを比較して同じだったら記号を...
発言  kanabun  - 13/12/10(火) 11:11 -

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

>▼kanabun さん
>回答ありがとうございます。
>実はA列+B列=C列の記号というか値が100とおり以上あります。

これは、いいかえれば、Sheet2の表は 100行以上ということですよね?

>  For i = 0 To UBound(u) - 1
>    dic(u(i)) = v(i + 1, 1) '例 dic("さ" & vbTab & "た") = "●"
>  Next
>  
>を100以上書かなくては駄目でしょうか?

変数u に 全データが入り、これを0番目から UBound(u) - 1 番目まで
For〜Nextで順に辞書に登録していますので、150あろうと、1500あろうと

>  For i = 0 To UBound(u) - 1
>    dic(u(i)) = v(i + 1, 1)
>  Next

でOKです。
・ツリー全体表示

【75086】Re:シートを比較して同じだったら記号を...
質問  hama E-MAIL  - 13/12/10(火) 10:47 -

引用なし
パスワード
   ▼kanabun さん
回答ありがとうございます。
実はA列+B列=C列の記号というか値が100とおり以上あります。
With GetObject("new:" & CLSID_DataObject)
    .GetFromClipboard
    u = Split(.GetText, vbCrLf)
  End With
  For i = 0 To UBound(u) - 1
    dic(u(i)) = v(i + 1, 1) '例 dic("さ" & vbTab & "た") = "●"
  Next
  
を100以上書かなくては駄目でしょうか?
・ツリー全体表示

【75085】Re:シートを比較して同じだったら記号を...
発言  kanabun  - 13/12/10(火) 10:29 -

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

こんにちは〜
○○の一つ覚えですが、Dictionaryを使った方法です。

Sub Try1()
 Const CLSID_DataObject = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
 Dim i As Long
 Dim u, v
 Dim r As Range
 Dim dic As Object
  Set dic = CreateObject("Scripting.Dictionary")
  
  'Sheet2の表をコピーして辞書に登録します
  With Worksheets("Sheet2")
    With .Range("A1").CurrentRegion
      .Resize(, 2).Copy 'A,B列をTABで連結文字列にする
      v = .Columns(3).Value 'C列の記号
    End With
  End With
  With GetObject("new:" & CLSID_DataObject)
    .GetFromClipboard
    u = Split(.GetText, vbCrLf)
  End With
  For i = 0 To UBound(u) - 1
    dic(u(i)) = v(i + 1, 1) '例 dic("さ" & vbTab & "た") = "●"
  Next
  
  'Sheet1のA+B列データが辞書にあるか検索
  With Worksheets("Sheet1")
    With .Range("A1").CurrentRegion
      .Resize(, 2).Copy 'A,B列をTABで連結文字列にする
      Set r = .Columns(3).Cells
      v = r.Value 'C列の記号
    End With
  End With
  With GetObject("new:" & CLSID_DataObject)
    .GetFromClipboard
    u = Split(.GetText, vbCrLf)
  End With
  Application.CutCopyMode = True
  For i = 0 To UBound(u) - 1
    If dic.Exists(u(i)) Then
      v(i + 1, 1) = dic(u(i)) ' "☆" ← dic("あ" & vbTab & "か")
    Else
      v(i + 1, 1) = "×"
    End If
  Next
  r.Value = v
  
End Sub

Dictionary(辞書)というのは メモリ上のLOOKUP表のことで、
今回のケースでは Sheet2の表を
A列データとB列データをTAB記号で区切って連結した文字列を キーとし、
対応するデータ(アイテムと言います)に C列の記号をという組データを
登録しておきます。
そして Sheet1 の A列+TAB+B列 文字列がDictionaryのキーに登録してあれば
>    If dic.Exists(u(i)) Then
で、True が返ってきますから、辞書内の u(i) キーに対応する アイテムを
C列用配列にコピーしていき(辞書になければ そこは × を代入し)
最後にまとめてシートのC列に配列を貼り付けます。
・ツリー全体表示

【75084】マクロで、セルに色をつけたいです。
質問  しずか  - 13/12/10(火) 2:14 -

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

<困っていること>

膨大な数値データがあります。
その値によって、セルを色分けをしたいのです。

が、条件付書式はエクセル2003である為、三つまでしか使えません。

シートコードを利用してみたのですが、
新しく、セルに入力をしないと色がつきません。
また、複数のセルを同時にコピペした場合、エラーが起こります。


なので、通常のマクロを組んだほうがいいのではないかと思いました。
が、当方、オートマクロを少しいじるか、
グーグルで調べてコピペしたものを少々修正する程度の知識しか持ち合わせておらず困っています。
どなたか教えていただけないでしょうか?
よろしくお願いいたします。

以下、やりたいことの詳細です。

--------------------------


セルB10から10×10の数値データがあります。
これをAグループとします。

同シート内に
数値の違う同様のデータがDグループまであって、

B25
B40
B55
と、続きます。

Aグループには、1〜100の数字がランダムに
Bグループには、10〜150の数字がランダムに
Cグループには、50〜200の数字がランダムに
Dグループには、80〜300の数字がランダムに
入ってます。

それぞれのグループのセルを10段階で色分けしたいです。

Aグループなら、
1以上10未満
10以上20未満
と、続いて
90以上100
それ以外と、空白は塗り潰しなし。

Bグループなら、
10以上〜20未満
20以上〜35未満
と、続いて
130以上〜150
それ以外と、空白は塗り潰しなし。


といった感じです。
・ツリー全体表示

【75083】シートを比較して同じだったら記号を入力
質問  hama E-MAIL  - 13/12/10(火) 0:25 -

引用なし
パスワード
   Sheet2にA列とB列2つの検索対象となる値とC列に入力したい文字があります。
Sheet1には記号が入っていないのでマクロで記号を入れたいのです。
また、Sheet2の検索値にないものはSheet1では×にしたいです。
どう作ればよいのかわかりません。どなたか教えてください。

Sheet1
  A  B  C
1 あ か
2 さ た
3 は ま
4 や ら
・ ・ ・
・ ・ ・
・ ・ ・

Sheet2
  A  B C
1 さ た ●
2 は ま ○
3 あ か ☆
4 や ら ★
・ ・ ・ ※
・ ・ ・ ◆
・ ・ ・ !
・ ・ ・ %
・ ・ ・ ◇
・ ・ ・ #

比較後、Sheet1のC列にSheet2C列にある記号を入力

Sheet1完成
  A  B  C
1 あ か ☆
2 さ た ●
3 は ま ○
4 や ら ★
・ ・ ・ ◆
・ ・ ・ ◇
・ ・ ・ ※
・ ・ ・ ×
・ ・ ・ #
・ ・ ・ %
・ツリー全体表示

【75082】Re:ファイル検索とリンク設定
質問  kohaku  - 13/12/9(月) 19:11 -

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

先日はお教え頂き、ありがとうございました。
仕様のバージョンアップが必要となり、悩んでおります。
是非追加でご教授頂けないかと、投稿致しました。
何卒、よろしくお願い申し上げます。

追加仕様:
セルの内容: 12345*  -->  実際のファイル名: 123451.pdf
上記のようなPDFファイルは1個しか存在しないことは分かっています。

現状は下記のとおり記述しておりますので、pdfファイルがありませんと
セルに入ってしまいます。
 
  If Range("C2") <> "" Then
    s = Range("C2") & ".pdf"
    If dic.Exists(s) Then
     Range("K2").Value = dic(s)
     With ActiveSheet
       .Hyperlinks.Add anchor:=Range("k2"), dress:=Range("k2").Value
     End With
    Else
     Range("K2").Value = "PDFファイルが存在しません。"
     With ActiveSheet
       .Hyperlinks.Delete
     End With
    End If
  Else
     Range("K2").Value = ""
  End

■配列の中身を曖昧検索するには、どのように記述すればよいのでしょうか?
・ツリー全体表示

【75081】Re:シートを指定してメールのひな型作成
質問  lie  - 13/12/9(月) 14:41 -

引用なし
パスワード
   ▼lie さん:
>ワークブックのシートを指定して、メールに添付したいのですが、
>例えば、SHEET2にAさんの営業成績、SHEET3にBさんの営業成績
>これをAさんにSHEET2をメールに添付して送信。
>BさんにSHEET3を添付して送信。
>というようにマクロを組みたいのです。
>
>件名は『営業成績 ○月』○は今月を入れたいです。
>本文も毎月送信するので毎月決まった本文です。
>
>このようなマクロを組むことは可能でしょうか?
>マクロ初心者なものでさっぱりなのですが、教えていただきたいです。
>よろしくお願いします。

すいません補足です。

ダイレクトに送信ではなくて、
emlファイルを作りたいのです。

emlファイルを開けば、宛名も件名も本文も添付ファイルも付けてある状態にしたいのです。

どうかお知恵をお貸しくださいませ。
よろしくお願い致します。
・ツリー全体表示

【75080】シートを指定してメールのひな型作成
質問  lie  - 13/12/9(月) 13:21 -

引用なし
パスワード
   ワークブックのシートを指定して、メールに添付したいのですが、
例えば、SHEET2にAさんの営業成績、SHEET3にBさんの営業成績
これをAさんにSHEET2をメールに添付して送信。
BさんにSHEET3を添付して送信。
というようにマクロを組みたいのです。

件名は『営業成績 ○月』○は今月を入れたいです。
本文も毎月送信するので毎月決まった本文です。

このようなマクロを組むことは可能でしょうか?
マクロ初心者なものでさっぱりなのですが、教えていただきたいです。
よろしくお願いします。
・ツリー全体表示

【75079】Re:シート別にコピー
お礼  yui  - 13/12/9(月) 11:27 -

引用なし
パスワード
   上手くできました。
大変ありがとうございました!
・ツリー全体表示

【75078】Re:シート別にコピー
回答  AceNumber  - 13/12/9(月) 11:08 -

引用なし
パスワード
   ▼yui さん:
>ありがとうございます!!
>ちゃんと発動してくれました!!
>
>もう一つ‥保存先を指定したいのですが、どこを変更すればよいでしょうか‥??

それであれば、保存先を指定できるようにダイアログを出すことができます。

Sub Sample2()

Dim ws   As Worksheet
Dim strPath As String

  '保存先を選択するダイアログ
  If Application.FileDialog(msoFileDialogFolderPicker).Show Then
    strPath = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
  End If

  For Each ws In ThisWorkbook.Sheets
    If ws.Index > 3 Then
      ws.Copy
      Application.DisplayAlerts = False
      ActiveWorkbook.SaveAs strPath & "\" & ws.Name & Format(Now(), "(m月)") & ".xls", xlExcel8
      ActiveWorkbook.Close
      Application.DisplayAlerts = True
    End If
  Next ws

End Sub
・ツリー全体表示

【75077】Re:シート別にコピー
質問  yui  - 13/12/9(月) 10:53 -

引用なし
パスワード
   ありがとうございます!!
ちゃんと発動してくれました!!

もう一つ‥保存先を指定したいのですが、どこを変更すればよいでしょうか‥??
・ツリー全体表示

【75076】Re:シート別にコピー
回答  AceNumber  - 13/12/9(月) 10:39 -

引用なし
パスワード
   ▼yui さん:
> コピーしたいシートはSHEET1〜13のSHEET4からです。
> 保存先を指名したいのと保存名にそれぞれのシート名とその月を入れたいです。
> 例えば‥シート名(12月)

こんにちは

保存対象シートが左から4番目以降として、下記で如何でしょうか。

Dim ws   As Worksheet

  For Each ws In ThisWorkbook.Sheets
    If ws.Index > 3 Then
      ws.Copy
      ActiveWorkbook.SaveAs "C:\" & ws.Name & Format(Now(), "(m月)") & ".xls", xlExcel8
      ActiveWorkbook.Close
    End If
  Next ws

End Sub

拡張子が".xls"でしたので、SaveAsにxlExcel8を付けていますが、
環境がExcel2003以前でしたら不要です。
・ツリー全体表示

【75075】シート別にコピー
質問  yui  - 13/12/9(月) 9:35 -

引用なし
パスワード
   エクセル マクロ

マクロ初心者です。

一つのファイルにシートごとに個人の情報が入っています。
それをシートごとに一つのブックとして保存していきたいのですが、なかなか上手くいきません‥

Sub 個別に保存()

Dim sh As Worksheet
Dim str As String

For Each sh In Worksheets

'シート名取得
str = sh.Name

'シートを違うファイルにコピー

ActiveSheet.Select
ActiveSheet.Copy

'保存処理

ActiveWorkbook.SaveAs Filename:= _
"C:\" _
& str & ".xls"

Next sh


End Sub

これだと、ファイルが開いたままになるし、いらないシートまでコピーしちゃいます。
コピーしたいシートはSHEET1〜13のSHEET4からです。
保存先を指名したいのと保存名にそれぞれのシート名とその月を入れたいです。
例えば‥シート名(12月)

仕事で使うので、どうかお力添えをお願い致します。
・ツリー全体表示

【75074】Re:連続印刷について
発言  HARA  - 13/12/9(月) 8:58 -

引用なし
パスワード
   シートを分けるか、ページを複数にすればよいのではないでしょうか。
・ツリー全体表示

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