Excelノート 99-04 その他

HOME  検索  索引  もくじ  関数目次  前ページへ  次ページへ

タイトル欄のアドレスは、エクセルファンクラブの該当する頁へのリンク先です。
詳しい事は、こちらの
お願いをご覧になってください。

61  自作のツールバーをバックアップするには?
62  現在開いている全てのExcelファイル名を取得するには
63  指定のフォルダ下の全てのフォルダ名を取得するには?
64  (株)・(有)を削除して会社名を表示するには
65  他のファイルを参照しているファイルを、そのファイル内で参照させるには【リンク元の変更】
66  フォルダ選択ダイアログボックスから、フォルダ名を取得するには?
67  指定の塗りつぶしのセルだけ、入力できなくするには
68  選択範囲の罫線、セルの値を180度回転させるには?
69  選択中のシートだけをメールに添付して、複数のアドレスに一気に送付するには?
70  IMEツールバー(言語バー)が表示できなくなりました
71  配列変数について
72  アシスタントを表示するには?
73  ひとつ上のフルパスを取得するには?
74  セルを点滅させるには?
75  改ページごとに、A列の一番始めのセルに書き込むには?
76  VBAで指定の場所にフォルダを作成するには?
77  Outlook Expressのメール内容を、Excelに取り込むには?
78  ファイル内の全てのシートのハイパーリンク先アドレスを、一気に変更するには?
79  改ページを正しく認識させるには?
80  フォント等、任意に設定したコメントを挿入するには?

61 自作のツールバーをバックアップするには?
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200109/01090122.txt
  「ツールバーのバックアップをするには?」 【編集ラウンジ】
Excel97、Excel2000、Excel2002 共通
1. 【ツール】【ユーザー設定】【ツールバー】で、【添付】のボタンをクリックします。
2. 出てきた画面の左の窓からバックアップを取りたいツールバーを右の窓にコピーします。
3. その状態で、ファイルを保存しておき、復旧の際そのファイルを開けば、
  登録されていたツールバーが復旧します。
62 現在開いている全てのExcelファイル名を取得するには
Sub test2()
 Dim M As Object, N() As String, i As Integer, j As Integer, NN As String
 i = 0
 NN = ""
 For Each M In Workbooks
  If M.Name <> "PERSONAL.XLS" Then
   i = i + 1
   ReDim N(i)
   N(i) = Left(M.Name, Len(M.Name) - 4)
   NN = NN & Chr(10) & N(i) & "、"
  End If
 Next
 MsgBox "現在開いているExcelのファイルは、" & Chr(10) & NN & Chr(10) & Chr(10) & "です"
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
63 指定のフォルダ下の全てのフォルダ名を取得するには?
http://www.keep-on.com/~excelyou/2000lng4/200005/00050154.txt
 「フォルダ下の全てのフォルダ名を取得するには?」 【VBAラウンジ】
Sub test()
 Dim atai As String
 atai = Dir("C:\My Documents\", vbDirectory)    
 '初回検索
 Do Until atai = Empty                 
   '該当ファイルがなくなるまで処理
  If atai <> "." And (atai <> "..") Then MsgBox atai  
'現在のフォルダと親フォルダは除く
  atai = Dir  
                        '引き続き検索
 Loop
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
64 (株)・(有)を削除して会社名を表示するには
選択したセルの先頭に付いた、(株)(有)(財)、株式会社、有限会社、財団法人を削除します。
これらが付いていない会社は、そのまま表示します。

Sub test()
 Dim c As Range
 '選択対象がセルでなければ、マクロを中止
 If Not TypeName(Selection) = "Range" Then Exit Sub
 For Each c In Selection
'選択したセル全てを処理
  Select Case Left(c, 3)
   Case "(株)": c = Mid(c, 4, Len(c))
   Case "(有)": c = Mid(c, 4, Len(c))
   Case "(財)": c = Mid(c, 4, Len(c))
   Case "(株)": c = Mid(c, 4, Len(c))
   Case "(有)": c = Mid(c, 4, Len(c))
   Case "(財)": c = Mid(c, 4, Len(c))
  End Select
  Select Case Left(c, 1)
   Case "": c = Mid(c, 2, Len(c))
   Case "": c = Mid(c, 2, Len(c))
  End Select
  Select Case Left(c, 4)
   Case "株式会社": c = Mid(c, 5, Len(c))
   Case "有限会社": c = Mid(c, 5, Len(c))
   Case "財団法人": c = Mid(c, 5, Len(c))
  End Select
 Next
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
A列の会社名から、(株)(株)(有)(有) を削除して、B列に表示します。
これらが付いていない会社は、そのまま表示します。

Sub 株イき社名()
 Dim i As Long
 '2行目から最終行まで繰り返す
 For i = 2 To Cells(Application.Rows.Count, 1).End(xlUp).Row
  If Left(Cells(i, 1), 3) = "(株)" Or Left(Cells(i, 1), 3) = "(有)" Then
   Cells(i, 2) = Mid(Cells(i, 1), 4, Len(Cells(i, 1)))
  ElseIf Right(Cells(i, 1), 3) = "(株)" Or Right(Cells(i, 1), 3) = "(有)" Then
   Cells(i, 2) = Mid(Cells(i, 1), 1, Len(Cells(i, 1)) - 3)
  ElseIf Left(Cells(i, 1), 1) = "" Or Left(Cells(i, 1), 1) = "" Then
   Cells(i, 2) = Mid(Cells(i, 1), 2, Len(Cells(i, 1)))
  ElseIf Right(Cells(i, 1), 1) = "" Or Right(Cells(i, 1), 1) = "" Then
   Cells(i, 2) = Mid(Cells(i, 1), 1, Len(Cells(i, 1)) - 1)
  Else
   Cells(i, 2) = Cells(i, 1)
  End If
 Next
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
選択したセルの先頭に付いた、(株)(株)(有)(有)(財)(財)を削除して、
先頭の文字がアルファベットの場合、フリガナをカタカナに変更します。
このマクロを実行すると、「ABC」「エービーシー」の混在した会社名も普通に並べ替えができます。

Sub test()
 Dim c As Range, N As String
 '選択対象がセルでなければ、マクロを中止
 If Not TypeName(Selection) = "Range" Then Exit Sub
 For Each c In Selection
'選択したセル全てを処理
  Select Case Left(c, 3)
   Case "(株)": c = Mid(c, 4, Len(c))
   Case "(有)": c = Mid(c, 4, Len(c))
   Case "(財)": c = Mid(c, 4, Len(c))
   Case "(株)": c = Mid(c, 4, Len(c))
   Case "(有)": c = Mid(c, 4, Len(c))
   Case "(財)": c = Mid(c, 4, Len(c))
  End Select
  Select Case Left(c, 1)
   Case "": c = Mid(c, 2, Len(c))
   Case "": c = Mid(c, 2, Len(c))
  End Select
  Select Case Left(c, 4)
   Case "株式会社": c = Mid(c, 5, Len(c))
   Case "有限会社": c = Mid(c, 5, Len(c))
   Case "財団法人": c = Mid(c, 5, Len(c))
  End Select
  N = ""
  Select Case Left(c, 1)
   Case "A", "A", "a", "a": N = "エー"
   Case "B", "B", "b", "b": N = "ビー"
   Case "C", "C", "c", "c": N = "シー"
   Case "D", "D", "d", "d": N = "ディー"
   Case "E", "E", "e", "e": N = "シー"
   Case "F", "F", "f", "f": N = "シー"
   Case "G", "G", "g", "g": N = "シー"
   Case "H", "H", "h", "h": N = "シー"
   Case "I", "I", "i", "i": N = "アイ"
   Case "J", "J", "j", "j": N = "ジェイ"
   Case "K", "K", "k", "k": N = "ケイ"
   Case "L", "L", "l", "l": N = "エル"
   Case "M", "M", "m", "m": N = "エム"
   Case "N", "N", "n", "n": N = "エヌ"
   Case "O", "O", "o", "o": N = "オー"
   Case "P", "P", "p", "p": N = "ピー"
   Case "Q", "Q", "q", "q": N = "キュウ"
   Case "R", "R", "r", "r": N = "アール"
   Case "S", "S", "s", "s": N = "エス"
   Case "T", "T", "t", "t": N = "ティー"
   Case "U", "U", "u", "u": N = "ユー"
   Case "V", "V", "v", "v": N = "ブイ"
   Case "W", "W", "w", "w": N = "ダブリュー"
   Case "X", "X", "x", "x": N = "エックス"
   Case "Y", "Y", "y", "y": N = "ワイ"
   Case "Z", "Z", "z", "z": N = "ゼット"
  End Select
  If N <> "" Then c.Characters.PhoneticCharacters = N
 Next
End Sub
65 他のファイルを参照しているファイルを、そのファイル内で参照させるには【リンク元の変更】
=Sheet1!C3 
のように他のシートを参照しているシートを、他のファイルにコピーすると、コピー先は 
='[Book1.xls]Sheet1'!C3 
のように、コピー元のファイルを参照してしまいます。
これを、コピー先のファイルに変更します。

 1.【編集】【リンクの設定】で、現在参照しているシートを選択し、【リンク元の変更】
 2. 出てきたファイル選択画面から、現在のファイルを探して選択し、【OK】【閉じる】

Sub リンクの変更1()         'リンク設定のあるセルを選択して実行
                     '参照元ファイルは開いていてもいなくてもOK
 Dim M As String, i As Integer
 M = ""
 '選択したセルの数式から、参照元のファイル名を取得
 For i = 3 To Len(ActiveCell.Formula)
  If Mid(ActiveCell.Formula, i, 1) = "]" Then
   Exit For
  ElseIf Mid(ActiveCell.Formula, i, 1) <> "[" Then
   M = M & Mid(ActiveCell.Formula, i, 1)
  End If
 Next
 'リンクの設定を、コピー元から現在のファイルに変更
 ActiveWorkbook.ChangeLink Name:=M, NewName:= _
 ThisWorkbook.Name, Type:=xlExcelLinks
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
Sub リンクの変更2()         '参照元のファイルを開いてから実行します
 Dim M As Object
 'エラーが出てもそのまま続行
 On Error Resume Next
 '現在開いている全てのファイルをひとつずつMの変数に格納して実行
 For Each M In Workbooks
  'リンクの設定を、Mから現在のファイルに変更
  'コピー元ファイルがMでなければ、エラーが出てそのまま素通り
  ActiveWorkbook.ChangeLink Name:=M.Name, NewName:= _
  ThisWorkbook.Name, Type:=xlExcelLinks
 Next
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
66 フォルダ選択ダイアログボックスから、フォルダ名を取得するには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200006/00060322.txt
 「フォルダパスを取得する組み込みダイアログボックスはありますか?」 【VBAラウンジ】
Type BROWSEINFO
 hWndOwner As Long
 pidlRoot As Long
 pszDisplayName As String
 lpszTitle As String
 ulFlags As Long
 lpfn As Long
 lParam As String
 iImage As Long
End Type
Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BROWSEINFO) As Long
Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidl As Long, ByVal pszPath As String) As Long
Public Const CSIDL_DESKTOP = &H0 'デスクトップ
Public Const BIF_BROWSEINCLUDEFILES = &H4000
Public Const BIF_RETURNONLYFSDIRS = &H1 'フォルダのみ選択可能
Public Function GetFolder(strComent As String, strPath As String) As Boolean
 Dim bif As BROWSEINFO
 Dim pidl As Long
 On Error GoTo ErrGetFolder
 With bif
  .pidlRoot = CSIDL_DESKTOP
  .ulFlags = BIF_RETURNONLYFSDIRS
  .lpszTitle = strComent
 End With
 pidl = SHBrowseForFolder(bif)
 If pidl <> 0 Then
  strPath = String$(256, vbNullChar)
  SHGetPathFromIDList pidl, strPath
  strPath = Left(strPath, InStr(strPath, vbNullChar) - 1)
  GetFolder = True
 Else
  GetFolder = False
 End If
 Exit Function
ErrGetFolder:
 GetFolder = False
End Function
Sub フォルダ選択()
 Dim Path As String
 If GetFolder("選択してね!", Path) = True Then
  MsgBox Path
 Else
  MsgBox "失敗しました。"
 End If
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
67 指定の塗りつぶしのセルだけ、入力できなくするには
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200112/01120049.txt
 「特定の色のついているセルに入力できないようにするには?」 【VBAラウンジ】
Sub test()
    Dim c As Range

    '保護解除
    ActiveSheet.Unprotect
    With Range("E1", Cells.SpecialCells(xlCellTypeLastCell))

        'E列以降最終セルまでのロックをはずす
        .Locked = False
        For Each c In .Cells
            Select Case c.Interior.ColorIndex

                '赤、青、ベージュの塗りつぶしの場合、ロックをかける
                Case 3, 5, 40: c.Locked = True
            End Select
        Next c
  End With

  'シートを保護する
  ActiveSheet.Protect
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
E列以降の、赤、青、ベージュの塗りつぶしのあるセルにだけロックをかけてシートを保護します
Sub miko_test()
 Dim i As Long, j As Long
 '既に保護されている場合、一旦解除
 If ActiveSheet.Protect Then ActiveSheet.Unprotect
 '全てのセルのロックをはずす
 Cells.Locked = False
 '5列目から最終列まで繰り返す
 For j = 5 To Cells.SpecialCells(xlCellTypeLastCell).Column
  '1行目から最終行まで繰り返す
  For i = 1 To Cells.SpecialCells(xlCellTypeLastCell).Row
   '赤、青、ベージュの塗りつぶしの場合、ロックをかける
   If Cells(i, j).Interior.ColorIndex = 3 Then Cells(i, j).Locked = True
   If Cells(i, j).Interior.ColorIndex = 5 Then Cells(i, j).Locked = True
   If Cells(i, j).Interior.ColorIndex = 40 Then Cells(i, j).Locked = True
  Next i
 Next j
 'シートを保護する
 ActiveSheet.Protect Contents:=True
End Sub
  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
68 選択範囲の罫線、セルの値を180度回転させるには?
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200112/01120036.txt
 「ワークシートを180°回転するには?」【編集ラウンジ】
Excel2002
エクセル2002の場合は、選択したセル範囲を【カメラ】、または【図のリンク貼り付け】をすると、
緑色のハンドルが出て自由に回転できます。
カメラ、図のリンク擦り付けについてはこちらをどうぞ。
 http://www.hm2.aitai.ne.jp/~naka95/Excel_Note/07-01_copy.htm#07-01-13
Excel97、Excel2000共通
セルの中で、文字を180度回転します。半角英数小文字には対応していません。

 1. 【書式】【セル】【配置】【方向】を、+90度 にします。
 2. 【フォント名】の頭に@マークを入れ、「@MS Pゴシック」 のようにします。
 3. 二文字以上ある場合、文字の間に Alt+Enter を入れます。 
選択した範囲内の罫線、セルの値を180度回転させた場所に移動させます。
セルの塗りつぶし、文字色、フォントも回転しますが、文字の向きはそのままです。

Excel97、Excel2000、エクセル2002確認済
Sub test()
 Dim SourceRange As Range
 Dim r As Range
 Dim TotalRow As Long
 Dim TotalColumn As Long
 Application.ScreenUpdating = False
 Set SourceRange = ActiveWindow.RangeSelection
 With SourceRange
  TotalRow = .Row * 2 + .Rows.Count - 1
  TotalColumn = .Column * 2 + .Columns.Count - 1
 End With
 ActiveSheet.Copy After:=ActiveSheet
 With ActiveSheet
  For Each r In SourceRange
   With .Cells(TotalRow - r.Row, TotalColumn - r.Column)
    .Value = r.Value
    .Interior.ColorIndex = r.Interior.ColorIndex      
   '塗りつぶし
    .Font.ColorIndex = r.Font.ColorIndex           
 '文字色
    .Font.Name = r.Font.Name                 
 'フォント
    With .Borders(xlEdgeLeft)
     .LineStyle = r.Borders(xlEdgeRight).LineStyle
     .Weight = r.Borders(xlEdgeRight).Weight
     .ColorIndex = r.Borders(xlEdgeRight).ColorIndex
    End With
    With .Borders(xlEdgeRight)
     .LineStyle = r.Borders(xlEdgeLeft).LineStyle
     .Weight = r.Borders(xlEdgeLeft).Weight
     .ColorIndex = r.Borders(xlEdgeLeft).ColorIndex
    End With
    With .Borders(xlEdgeTop)
     .LineStyle = r.Borders(xlEdgeBottom).LineStyle
     .Weight = r.Borders(xlEdgeBottom).Weight
     .ColorIndex = r.Borders(xlEdgeBottom).ColorIndex
    End With
    With .Borders(xlEdgeBottom)
     .LineStyle = r.Borders(xlEdgeTop).LineStyle
     .Weight = r.Borders(xlEdgeTop).Weight
     .ColorIndex = r.Borders(xlEdgeTop).ColorIndex
    End With
    With .Borders(xlDiagonalUp)
     If r.Borders(xlDiagonalUp).LineStyle = xlNone Then
      .LineStyle = xlNone
     Else
      .LineStyle = r.Borders(xlDiagonalUp).LineStyle
      .Weight = r.Borders(xlDiagonalUp).Weight
      .ColorIndex = r.Borders(xlDiagonalUp).ColorIndex
     End If
    End With
    With .Borders(xlDiagonalDown)
     If r.Borders(xlDiagonalDown).LineStyle = xlNone Then
      .LineStyle = xlNone
     Else
      .LineStyle = r.Borders(xlDiagonalDown).LineStyle
      .Weight = r.Borders(xlDiagonalDown).Weight
      .ColorIndex = r.Borders(xlDiagonalDown).ColorIndex
     End If
    End With
   End With
  Next
  For Each r In SourceRange.Rows(1).Cells
   .Columns(TotalColumn - r.Column).ColumnWidth = r.ColumnWidth
  Next
  For Each r In SourceRange.Columns(1).Cells
   .Rows(TotalRow - r.Row).RowHeight = r.RowHeight
  Next
 End With
 Application.ScreenUpdating = True
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
69 選択中のシートだけをメールに添付して、複数のアドレスに一気に送付するには?
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200204/02040095.txt
 「ブックを開いたままで1枚のシートだけメールで送るには。」 【編集ラウンジ】
選択中のシートを、「宛先マスタ」シートのC列に入力されている全てのアドレスにメール添付して送ります。
Sub test1()
 Dim vntADDRESS As Variant
 Dim strNAME As String
 With ThisWorkbook
  With .Worksheets("宛先マスタ")
   vntADDRESS = .Range("C2:C" & .Cells(Rows.Count, "C").End(xlUp).Row)
  End With
  strNAME = Left(.Name, Len(.Name) - 4) _
         & "_" & Format(ActiveSheet.Range("A2").Value, "yyyymm")
  On Error Resume Next
  Kill .Path & "\" & strNAME & ".xls"
  On Error GoTo 0
  .Save
 End With
 ActiveSheet.Copy
 With ActiveWorkbook
  .SaveAs Filename:=ThisWorkbook.Path & "\" & strNAME
  On Error Resume Next
  .SendMail Recipients:=vntADDRESS, Subject:=strNAME
  On Error GoTo 0
  .Close SaveChanges:=False
 End With
 Kill ThisWorkbook.Path & "\" & strNAME & ".xls"
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
70 IMEツールバー(言語バー)が表示できなくなりました
http://cgi.fuji.ne.jp/~fj2094/office2000/wwwlng.cgi?print+200203/02030054.txt 
 「IMEのバーを表示するには?」 【Excell以外ラウンジ】
http://cgi.fuji.ne.jp/~fj2094/office2000/wwwlng.cgi?print+200103/01030045.txt 
 「IME2000が表示するには?」 【Excell以外ラウンジ】
http://cgi.fuji.ne.jp/~fj2094/office2000/wwwlng.cgi?print+200204/02040119.txt 
 「IMEツールバーを表示するには・・・・WinXP編」 【Excell以外ラウンジ】
【コントロールパネル】【キーボード】【言語】【変更】【基本設定】【言語バー】で、
【言語バーをディスクトップ上に表示】にチェックしてOKをクリック、画面上に出たバーの左側で右クリック
【最小化】を選択しメッセージが出たらOKをクリックにて完了。
 ※ バージョンによって、操作法が違います。
Windows XP IME 2002
 http://homepage2.nifty.com/winfaq/wxp/trouble.html#1325
71 配列変数について
Dim a(3) as .... a(0)  a(1)  a(2)  a(3)  の4つの変数が使えます
Option Base 1
Dim a(3) as ....
Option Base 1       を宣言すると、最小値が変更されます。
a(1)  a(2)  a(3)      の3つの変数が使えます
Dim a(2 To 4).... a(2)  a(3)  a(4)      の3つの変数が使えます

Dim a() ....
ReDim a(2)

コードの途中で、使える変数の数を変えることも出来ます。
Sub TEST()
 Dim MyArr() As String
 Dim i As Integer
 For i = 97 To 106
  ReDim Preserve MyArr(97 To i)
  MyArr(i) = Chr(i)
 Next
 MsgBox "要素のインデックスの最小値は " & LBound(MyArr) & vbCrLf & _
 "要素のインデックスの最大値は " & UBound(MyArr)
 For i = LBound(MyArr) To UBound(MyArr)
  MsgBox i & " 番のインデックスの要素の値は " & MyArr(i)
 Next
End Sub

Sub test2()
 Dim a() As Integer
 ReDim a(2)
  'この間使える変数は、a(0)、a(1)、a(2)
 ReDim a(1)
  'この間使える変数は、a(0)、a(1)
End Sub

72 アシスタントを表示するには?
Sub test()
 'Assistant.On = True       'アシスタントが無効になっている場合、有効にする
 Assistant.Visible = True     'アシスタントを表示する
 
'Assistant.Visible = False     'アシスタントを非表示にする
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
73 ひとつ上のフルパスを取得するには?
http://www.ae.wakwak.com/cgi-bin/sbox/~efc21/wwwlng.cgi?print+200205/02050510.txt 
 「対象ファイルのひとつ上のパスを取得するには?」 【VBAラウンジ】
Sub test()
 Dim MyPath As String, S_Path As String
 MyPath = ThisWorkbook.Path
 S_Path = Left(MyPath, InStrRev(MyPath, "\", -1, 1) - 1)
 MsgBox "このブックのパスは" & MyPath & "です。" & Chr(10) & _
 "ひとつ上のパスは" & S_Path & "です。"
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
74 セルを点滅させるには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200102/01020111.txt 
 「セルを点滅させることできますか?」 【VBAラウンジ】
Sub 枠点滅()
 With ActiveSheet
  Dim counter As Integer, setTime
  .Protect
  For counter = 1 To 10
   If .EnableSelection = xlNoSelection Then
    .EnableSelection = xlNoRestrictions
   Else
    .EnableSelection = xlNoSelection
   End If
   setTime = Timer
   Do
    DoEvents
   Loop Until Timer >= setTime + 0.4
  Next
  .Unprotect
 End With
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
Sub 文字点滅()
 Dim selR As Range
 Dim selId() As Integer
 Dim selNum As Integer
 Dim i As Integer, colorId(1) As Integer
 Dim counter As Integer, setTime, flash
 Set selR = Selection
     '点滅させるセル範囲
 selNum = selR.Count
 colorId(0) = 3
         '点滅色
 colorId(1) = 2
         ' 〃
 ReDim selId(1 To selR.Count)
 For i = 1 To selR.Count
  selId(i) = selR(i).Font.ColorIndex
 Next i
 For counter = 1 To 5
  For Each flash In colorId
   selR.Font.ColorIndex = flash
   setTime = Timer
   Do
    DoEvents
   Loop Until Timer >= setTime + 0.3
  Next flash
 Next counter
 For i = 1 To selR.Count
  selR(i).Font.ColorIndex = selId(i)
 Next i
End Sub
  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
シートをアクティブにすると、E5セルをアクティブにして枠が10回点滅します。
Private Sub Worksheet_Activate()
 Dim counter As Integer, setTime
 With ActiveSheet
  .Cells(10, 5).Select
  .Protect
  For counter = 1 To 10
   If .EnableSelection = xlNoSelection Then
    .EnableSelection = xlNoRestrictions
   Else
    .EnableSelection = xlNoSelection
   End If
   setTime = Timer
   Do
    DoEvents
   Loop Until Timer >= setTime + 0.4
  Next
  .Unprotect
 End With
End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
75 改ページごとに、A列の一番始めのセルに書き込むには?
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200206/02060032.txt
 「改ページ時に大項目を再表示(印刷)させるには?」 【編集ラウンジ】
改ページごとに、A列の最初の行に「見出し」と書き込みます
Sub test()
 Dim hp As Object
 For Each hp In ActiveSheet.HPageBreaks
  Cells(hp.Location.Row, 1) = "見出し"
 Next
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
改ページごとに、A列の最初の行に「 * ページ目」と書き込みます
Sub miko_test()
 Dim i As Long
 For i = 1 To ActiveSheet.HPageBreaks.Count
  Cells(ActiveSheet.HPageBreaks(i).Location.Row, 1) = i & "ページ目"
 Next
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
改ページごとに、ページ数とA列の一番始めのセルの値を、新規シートに書き込みます。
Sub miko_test()
 Dim WS1 As Worksheet, WS2 As Worksheet
 Dim i As Long, j As Integer
 On Error Resume Next       
   'エラーが出てもそのまま続行
 Sheets.Add Before:=Sheets(1) 
   'シートの追加
 Set WS1 = Worksheets("sheet1")
  '元シート
 Set WS2 = Worksheets(1)
       '新規に追加したシート
 WS2.Select
 j = 1
 With WS1
  For i = 1 To (.HPageBreaks.Count + 1) * (.VPageBreaks.Count + 1)
   Cells(Cells(Application.Rows.Count, 1).End(xlUp).Row + 1, 1) = i
   Cells(Cells(Application.Rows.Count, 1).End(xlUp).Row, 2) = .Cells(j, 1)
   j = .HPageBreaks(i).Location.Row
  Next
 End With
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
76 VBAで指定の場所にフォルダを作成するには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200206/02060238.txt 
 「フォルダを作成するには?」 【VBAラウンジ】
Sub test()
 MkDir "C:\AAA"
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
77 Outlook Expressのメール内容を、Excelに取り込むには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200206/02060215.txt 
 「Outlook Expressの特定のフォルダ内のメールを取り込むには?」 【VBAラウンジ】
【準備】
1. 以下のサイトから、BASP21 DLL をダウンロードして
     http://www.hi-ho.ne.jp/babaq/basp21.html 
  任意の場所に保存し、インストールします。インストールは、BASP21.exe を実行するだけです。
2. Outlook Express を起動し、書き出したいメールを選択して(Shift、Ctrl を押しながら複数選択できます)
  任意のフォルダにドラッグします。
  ドラッグしたメールは、フォルダ内に.emlファイルとしてコピーされます。

Private Declare Function ReadMail Lib "bsmtp" _
(szFilename As String, szPara As String, szDir As String) As Variant
Sub メールファイル書き出し()
 '************************************************************
 '***** 指定ファルダ内のファイル名をA列に記入
 '************************************************************
 Dim N As String
 Dim PathName As String
 'メールのemlファイルが保存されるフォルダのフルパス
 PathName = "C:\My Documents\保存メール\"  ’←環境に合わせて変更してください
 N = Dir(PathName & "*.eml")
 Do Until N = ""
  Cells(Cells(Rows.Count, "A").End(xlUp).Row + 1, 1) = N
  N = Dir()
 Loop
 '************************************************************
 '***** メール内容を書き出し (A列にヘッダー、B列に本文を書き出します)
 '************************************************************
 Dim szFilename As String, szPara As String, szDir As String
 Dim retv As Variant, v As Variant
 Dim i As Long, j As Long, k As Long
 For k = 2 To Cells(Rows.Count, "A").End(xlUp).Row
  szFilename = PathName & Cells(k, 1)
  szDir = Left(PathName, Len(PathName) - 1)
' 添付ファイルが保存されるディレクトリ
  szPara = "subject:from:to:date:"
' ヘッダーの指定
  ' nofile: とすると添付ファイルを保存しません。
  Cells(Cells(Rows.Count, "A").End(xlUp).Row + 1, 1) = " "
  Cells(Cells(Rows.Count, "A").End(xlUp).Row, 2) = " "
  Rows(Cells(Rows.Count, "A").End(xlUp).Row).Interior.ColorIndex = 6
  retv = ReadMail(szFilename, szPara, szDir)
  If IsArray(retv) Then
   For Each v In retv
    If Left(v, 4) <> "Body" Then
     Cells(Cells(Application.Rows.Count, 1).End(xlUp).Row + 1, 1).Value = v
    Else
     i = 2
     Do
      If Mid(v, i, 1) = Chr(10) Then
       If Left(v, i - 2) <> "" Then
        Cells(Cells(Application.Rows.Count, 2).End(xlUp).Row + 1, 2).Value = Left(v, i - 2)
       Else
        Cells(Cells(Application.Rows.Count, 2).End(xlUp).Row + 1, 2).Value = " "
       End If
       v = Right(v, Len(v) - i)
       i = 2
      Else
       i = i + 1
      End If
      If Right(v, Len(v) - i) = "" Then Exit Do
     Loop
    End If
   Next
   Cells(Cells(Application.Rows.Count, 2).End(xlUp).Row, 1).Value = " "
  Else
   Cells(Cells(Application.Rows.Count, 1).End(xlUp).Row + 1, 1).Value = retv
  End If
 Next
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。

78 ファイル内の全てのシートのハイパーリンク先アドレスを、一気に変更するには?
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200206/02060146.txt 
 「ハイパ−リンク先のパスの置換」  【編集ラウンジ】
Sub miko_test()
 Dim H As Hyperlink, aa As String, R As String, S As Worksheet
 aa = Application.InputBox(Prompt:="新しいハイパーリンク先のアドレスを入力してください。", Default:=aa, Type:=2)
 For Each S In Worksheets
  With S
   For Each H In .Hyperlinks
    R = H.Range.Address
    H.Delete
    .Hyperlinks.Add Anchor:=.Range(R), Address:=aa, TextToDisplay:=aa
   Next
  End With
 Next
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
79 改ページを正しく認識させるには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200106/01060055.txt
 「印刷のページ数をカウントするには」 【VBAラウンジ】
一旦、改ページプレビューにすると、正しく認識できます。
Sub test()
 Dim i As Integer
 Application.ScreenUpdating = False
'画面の動きを固定
 '正しく改ページ位置を取得する為、一旦改ページプレビューにする
 ActiveWindow.View = xlPageBreakPreview
 '縦方向最終改ページ数取得
 MsgBox "改ページの回数は " & ActiveSheet.HPageBreaks.Count & " 回です"
 For i = 1 To ActiveSheet.HPageBreaks.Count
  MsgBox i & " 回目の改ページで、次ページの最初の行は " & _
  ActiveSheet.HPageBreaks(i).Location.Row & " 行目になります"
 Next
 With ActiveSheet.UsedRange
  MsgBox "シート自体の最終行は " & .Row + .Rows.Count - 1 & " 行目になります"
 End With
 ActiveWindow.View = xlNormalView
'改ページプレビューを戻す
 Application.ScreenUpdating = True
'画面の固定解除
End Sub

  この使い方は、マクロの使い方(1)標準モジュールにあります。
80 フォント等、任意に設定したコメントを挿入するには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200105/01050337.txt 
 「セルのコメントについて質問」 【VBAラウンジ】 
Sub CommentFont()
 Dim aa(2) As Variant, x As Variant
 aa(1) = Application.InputBox(Prompt:="作成者名を入力してください。", Type:=2)
 aa(2) = Application.InputBox(Prompt:="コメント内容を入力してください。", Type:=2)
 'キャンセル処理
 If (VarType(aa(1)) = vbBoolean) And (VarType(aa(2)) = vbBoolean) Then Exit Sub
 
'既にコメントが挿入されている場合
 If Not IsError(x) Then
  If MsgBox("既にコメントが挿入されています。既存のコメントをクリアしていいですか?", _
    vbOKCancel + vbQuestion) = vbOK Then
    Selection.ClearComments
  Else
   Exit Sub
  End If
 End If
 With Selection
  .AddComment                 
'コメント挿入
  .Comment.Visible = False
          '非表示
  'コメントの内容
  If (VarType(aa(1)) = vbBoolean) Or aa(1) = "" Then       
'作成者を入れない場合
   .Comment.Text Text:=aa(2)
  ElseIf (VarType(aa(2)) = vbBoolean) Or aa(2) = "" Then
    '本文を入れない場合
   .Comment.Text Text:="記入者 " & aa(1)
  Else                                   
'両方を入れる場合
   .Comment.Text Text:="記入者 " & aa(1) & Chr(10) & aa(2)
   
'フォント設定
   With .Comment.Shape.TextFrame.Characters(Start:=1, Length:=Len(aa(1)) + 4).Font
    .Italic = True                
'斜体
    .Size = 11                  
'文字サイズ11ポイン
    .ColorIndex = 3
              '赤色
    .Bold = True
                '太字
   End With
  End If
  With .Comment.Shape
   .Line.ForeColor.SchemeColor = 10    
'枠線色
   .Line.Weight = 4               
'枠線太さ
   .Fill.ForeColor.SchemeColor = 42
    '背景色
  End With
 End With
End Sub

  この使い方は、マクロの使い方(1)標準モジュールにあります。

HOME  検索  索引  もくじ  関数目次  前ページへ  次ページへ

このページのTOPへ     

inserted by FC2 system