Excelノート 99-03 その他

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

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

41 複数についたセルの色を別の色に一気に変えるには
42 総ページ数を表示
43 計算結果のエラー値の一覧
44 エクセルで、「碁盤」を作りたい
45 チェックする人をパスワードで限定する方法は?
46 1つの数字を打ち込んだらEnterキー押さないでも、右隣のセルに移動させるには
47 全シートの保護と解除
48 メール返信用の引用記号を挿入
49 フォルダ内の全てのファイル名をセルに表示するには
50 変数名の規則
51 順列組み合せ
52 セルの中でタブキーを押したときに任意の数のスペースを空け、そのままセル内に続けて入力するには?
53 合計金額、合計個数を指定して、すべての組み合わせを表示したい
54 セルを選択したとき、F2を押さずに自動的に編集状態にするには?
55 セルの中で、複数の単語を間隔を空けてきれいに整列させて表示するには?
56 シートを保護した状態で、ロックしていないセルの書式等が変更できません。
57 選択範囲のセルを、縦方向に結合するには
58 個数・方向を指定して結合するには
59 ツールバー・メニューバー、タイトルバーの右クリックメニューを表示、非表示を切り替えるには?
60 マウスでの、ドラッグ、ドロップを禁止するには?

41 複数についたセルの色を別の色に一気に変えるには
Sub ColorConv()
 Dim c As Range
 For Each c In Selection
  With c.Interior
   If .Color = vbYellow Then .Color = vbRed
  End With
 Next
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。                  
他の色にするには vbRed のところを以下のようにします。
 vbBlack    黒
 vbGreen    緑
 vbYellow    黄
 vbBlue     青
 vbMagenta  マゼンタ
 vbCyan    シアン
 vbWhite    白
42 総ページ数を表示
http://www.ae.wakwak.com/cgi-bin/sbox/~efc21/wwwlng.cgi?print+200203/02030059.txt
  シートのページ数を知るには? 【VBAラウンジ】
http://www.keep-on.com/excelyou/2000lng1/200011/00110146.txt
  「ページ数を自動計算させるにはどうすれば?」 【編集ラウンジ】
アクティブシートのA列にシート名、B列にページ数を入力します。
Sub test()
    Dim WS As Worksheet, c As Worksheet
    Dim i As Integer
    Set WS = ActiveSheet
    Application.ScreenUpdating = False
    For Each c In Worksheets
        c.Activate
        i = i + 1
        WS.Cells(i, 1) = c.Name
        WS.Cells(i, 2) = Application.ExecuteExcel4Macro("Get.Document(50)")
    Next
    WS.Activate
    Application.ScreenUpdating = True
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。     
Sub 総ページ数を表示()
 Dim Lastpage As Integer
 Lastpage = (ActiveSheet.HPageBreaks.Count + 1) * (ActiveSheet.VPageBreaks.Count + 1)
 MsgBox Lastpage
End Sub

  このコードの使い方は、マクロの使い方(1)標準モジュールにあります。     
43 計算結果のエラー値の一覧
#DIV/0! 数式で、0による割り算が行われた時に表示されます。空白セルの場合も同様。
#N/A 検索関数の引数として、検索値の近似値が見つからない場合に表示されます。
#NAME? 関数の名前を間違った時に表示されます。
#NULL! セル参照の指定が間違っていて、参照されるセルが存在しない場合に表示されます。
#NUM! 数式の数値が不適切な場合に表示されます。
#REF 数式中で、無効なセルを参照した場合に表示されます。
#VALUE! 引数や演算子の種類が正しくない時に表示されます。
###### セルの幅が不足して結果が表示できない場合に表示されます。
44 エクセルで、「碁盤」を作りたい
http://www.keep-on.com/excelyou/2001lng5/200101/01010100.txt
  「エクセルで、「碁盤」を作りたい。」 【その他ラウンジ】
【注意】
 このマクロは、Excel2002ではエラーが出ます。
 先にこちらの方法でエラーチェックを解除してから実行してください。
   ※ 【ツール】 【マクロ】 【セキュリティ】 の 【信頼のおけるソース元】 で、
      【Visual Basic プロジェクトへのアクセスを信頼する】にチェックを入れてください。 

 また、このコードはウイルスチェックに,引っかかっることもあるようですので、ご注意ください。
  http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200207/02070484.txt 
 因みに、WinMe + Excel2000 + Norton Internet Securityでは問題なく動作確認済みです。

【使い方】
1.Excelを新規に立ち上げ、既定のBook1から実行します。
2.シート上にコントロールボックスからコマンドボタンを作ります。
  コントロールボックスを表示するには[表示]−[ツールバー]−[コントロールボックス]です。
3.コマンドボタンをダブルクリックし、下記のコードを貼り付けます。
 Option Explicit
 Private Sub CommandButton1_Click()
  Dim n As Integer, m As Integer, maxRC As Integer
  Dim res As String, BNam As String
  Dim sC As String, DM As String
  DM = Chr(13)
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  
' 新規ブックを作り、"碁盤" シートを作成
  Workbooks.Add
  BNam = ActiveWorkbook.Name
  Workbooks(BNam).Activate
  'Sheets.Add.Name = "碁盤"
  Sheets(1).Name = "碁盤"
  With Sheets("碁盤")
   
   ' 碁盤の目
   .Cells(2, 2).Value = "┏"
   .Cells(2, 20).Value = "┓"
   .Cells(20, 2).Value = "┗"
   .Cells(20, 20).Value = "┛"
   For n = 3 To 19
    .Cells(2, n).Value = "┯"
    .Cells(20, n).Value = "┷"
   Next
   For n = 3 To 19
    .Cells(n, 2).Value = "┠"
    .Cells(n, 20).Value = "┨"
   Next
   For m = 3 To 19
    For n = 3 To 19
     .Cells(n, m).Value = "┼"
    Next
   Next
   
' 星
   For m = 5 To 17 Step 6
    For n = 5 To 17 Step 6
     .Cells(n, m).Value = "╋"
    Next
   Next
   
' 大きさ設定
   .Cells.Select
   Selection.Font.Size = 16
   Selection.RowHeight = 18
   Selection.ColumnWidth = 2.25
   Selection.Interior.ColorIndex = 10
   
' その他の設定
   With ActiveWindow
    .DisplayGridlines = False
    .DisplayHeadings = False
   End With
   For m = 2 To 20
    For n = 2 To 20
     .Cells(n, m).Interior.ColorIndex = 36
    Next
   Next
   
' 十五路盤
   maxRC = 21
   res = MsgBox("連珠用の十五路盤にしますか?", 292, "?")
   If res = vbYes Then
    .Rows(8).Delete shift:=xlUp
    .Rows(8).Delete shift:=xlUp
    .Rows(11).Delete shift:=xlUp
    .Rows(11).Delete shift:=xlUp
    .Columns(8).Delete shift:=xlToLeft
    .Columns(8).Delete shift:=xlToLeft
    .Columns(11).Delete shift:=xlToLeft
    .Columns(11).Delete shift:=xlToLeft
    maxRC = 17
   End If
   
' Index
   
res = MsgBox("碁盤目にインデックスをつけますか?", 292, "?")
   If res = vbYes Then
    .Rows("1:1").Select
    With Selection
     .HorizontalAlignment = xlCenter
     .VerticalAlignment = xlBottom
     .Font.Size = 10
    End With
    For n = 2 To 20
     If .Cells(n, 2) = "" Then Exit For
      .Cells(n, 1).Value = n - 1
      .Cells(n, 1).Font.ColorIndex = 2
    Next
    .Columns("A:A").Select
    With Selection
     .HorizontalAlignment = xlRight
     .VerticalAlignment = xlCenter
     .Font.Size = 10
    End With
    For n = 2 To 20
     If .Cells(2, n) = "" Then Exit For
      .Cells(1, n).Value = Chr(n + 63)
      .Cells(1, n).Font.ColorIndex = 2
    Next
   End If
   .Cells(1, 50) = maxRC
   .Cells(1, 50).Font.ColorIndex = 16
   .Cells(1, 1).Value = 0 '手数
   .Cells(1, 1).Select
   Selection.Font.ColorIndex = 16
  End With
  
' Event macro を記載
  sC = "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range," _
   & "Cancel As Boolean)" & DM
  sC = sC & "Dim tekazu As Integer, maxRC As Integer" & DM & "maxRC = Cells(1, 50).Value" & DM _
   & "If Target.Row = 1 Then Exit Sub" & DM & "If Target.Row >= maxRC Then Exit Sub" & DM _
   & "If Target.Column = 1 Then Exit Sub" & DM & "If Target.Column >= maxRC Then Exit Sub" & DM
  sC = sC & "tekazu = Cells(1, 1).Value" & DM & "If tekazu / 2 = Int(tekazu / 2) Then" & DM _
   & "ActiveCell.Value = ""●""" & DM & "ActiveCell.Font.Bold = False" & DM & "Else" & DM _
   & "ActiveCell.Value = ""○""" & DM & "ActiveCell.Font.Bold = True" & DM & "End If" _
   & DM & "Cells(1, 1).Value = tekazu + 1" & DM & "Cancel = True" & DM & "End Sub" & DM
  sC = sC & "Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, " _
   & "Cancel As Boolean)" & DM & "Dim maxRC As Integer" & DM & "maxRC = Cells(1, 50).Value" & DM
  sC = sC & "If Target.Row = 1 Then Exit Sub" & DM & "If Target.Row >= maxRC Then Exit Sub" & DM _
   & "If Target.Column = 1 Then Exit Sub" & DM & "If Target.Column >= maxRC Then Exit Sub" & DM
  sC = sC & "If ActiveCell.Value = ""●"" Then" & DM & "ActiveCell.Value = ""○""" & DM _
   & "ActiveCell.Font.Bold = True" & DM & "ElseIf ActiveCell.Value = ""○"" Then" & DM _
   & "If Target.Row = 2 Then" & DM & "If Target.Column = 2 Then" & DM _
   & "ActiveCell.Value = ""┏""" & DM
  sC = sC & "ElseIf Target.Column = maxRC - 1 Then" & DM & "ActiveCell.Value = ""┓""" _
   & DM & "Else" & DM & "ActiveCell.Value = ""┯""" & DM & "End If" & DM _
   & "ElseIf Target.Row = maxRC - 1 Then" & DM & "If Target.Column = 2 Then" & DM
  sC = sC & "ActiveCell.Value = ""┗""" & DM & "ElseIf Target.Column = maxRC - 1 Then" & DM _
   & "ActiveCell.Value = ""┛""" & DM & "Else" & DM & "ActiveCell.Value = ""┷""" & DM _
   & "End If" & DM & "Else" & DM & "If Target.Column = 2 Then" & DM
  sC = sC & "ActiveCell.Value = ""┠""" & DM & "ElseIf Target.Column = maxRC - 1 Then" _
   & DM & "ActiveCell.Value = ""┨""" & DM & "Else" & DM & "ActiveCell.Value = ""┼""" _
   & DM & "End If" & DM & "End If" & DM
  sC = sC & "If (Target.Column = 5 Or Target.Column = 11 Or Target.Column = 17) _" _
   & DM & "And (Target.Row = 5 Or Target.Row = 11 Or Target.Row = 17) _" _
   & DM & "And maxRC = 21 Then" & DM & "Target.Value = ""╋""" & DM
  sC = sC & "ElseIf (Target.Column = 5 Or Target.Column = 9 Or Target.Column = 13) _" _
   & DM & "And (Target.Row = 5 Or Target.Row = 9 Or Target.Row = 13) _" _
   & DM & "And maxRC = 17 Then" & DM & "Target.Value = ""╋""" & DM & "End If" & DM
  sC = sC & "ActiveCell.Font.Bold = False" & DM & "Else" & DM & "ActiveCell.Value = ""●""" _
   & DM & "ActiveCell.Font.Bold = True" & DM & "End If" & DM & "Cancel = True" _
   & DM & "End Sub"
  Workbooks(BNam).VBProject.VBComponents("Sheet1").CodeModule.InsertLines 3, sC
  Application.ScreenUpdating = True
  Application.DisplayAlerts = True
  MsgBox ("できました。")
 End Sub
4.普通の Excel の画面に戻り、コントロールツールボックスの三角定規アイコンを押して
  凹んでいない状態にし、コントロールツールボックスを閉じます。
5.コマンドボタンを押します。これで碁盤ができます。
  ダブルクリックで白黒交互に打つことができ、右クリックで修正ができます。

45 チェックする人をパスワードで限定する方法は?                    
http://www.keep-on.com/excelyou/2000lng5/200008/00080010.txt
  「チェックボックスにチェックする人を限定する方法は?」 【その他ラウンジ】
シートの記入例です。
        A     B      C       D
   1   わらびし   Yon     ミコ    しろくま    ←名前をクリックし、パスワードを入力すると
   2     未      未      未      未    ←"済"になります
           *****途中省略******
 100    1111     2222     3333      4444    ←あらかじめパスワードを入れておきます
 101     未      未      未      未    ←これも入れておきます

登録者にパスワードを申請してもらい、シートのずっと下方の、使用しない
行のセルに各々記入しておきます。
下の例では、100行目のセルに、それぞれ A1〜**1セルの人物に対応するパスワードを
記入しておきます。文字色を白にするか、非表示にするといいかもしれません。

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
  Dim Nam As String
  
' 一行目以外を Double Click しても何も起きない
  If Target.Row <> 1 Then Exit Sub
   
' Double Click したセルが空欄でなかったら(名前が書いてあったら)
  If IsEmpty(Cells(1, Target.Column)) = False Then
   Nam = InputBox("パスワードを記入してください。", "Password ?", "****")
  End If
  
' Password が正しい時
  If Nam = Cells(100, Target.Column).Value Then ' 100行目の Password
   
' 閲覧済でない時
   If Cells(2, Target.Column).Value <> "済" Then
    Cells(2, Target.Column) = "済"
    Cells(2, Target.Column).Font.ColorIndex = 1 ' "済" の文字色
    Cells(101, Target.Column) = "済"
   
' 閲覧済の時
   ElseIf Cells(2, Target.Column).Value = "済" Then
    Cells(2, Target.Column) = "未"
    Cells(2, Target.Column).Font.ColorIndex = 3 ' "未" の文字色
    Cells(101, Target.Column) = "未"
   End If
  Else
   MsgBox ("パスワードが違います。")
  End If
  Cancel = True
 End Sub
 Private Sub Worksheet_Activate()
  Rows(11).Copy
  Cells(2, 1).Select
  Selection.PasteSpecial xlValue
  Application.CutCopyMode = False
  Cells(1, 1).Select
 End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
こういうシートの場合
      A      B     C    D      E
   1        わらびし  Yon   ミコ   しろくま
   2   8/1     未     未   未      未
   3   8/2     未     未   未      未 
   4   8/4     未     未   未       未 
*****途中省略******
 100          1111   2222   3333    4444   ←パスワードをあらかじめ入力しておきます

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
  Dim Nam As String
  
' 一行目以外を Double Click しても何も起きない
  If Target.Row = 1 Then Exit Sub
   Nam = InputBox("パスワードを記入してください。", "Password ?", "*****") 
   
' Password が正しい時
  If Nam = Cells(100, Target.Column).Value Then ' 100行目の Password
   
' 閲覧済でない時
   If Selection.Value <> "済" Then
    Selection = "済"
    Selection.Font.ColorIndex = 1 ' "済" の文字色 
    
' 閲覧済の時
   ElseIf Selection.Value = "済" Then
    Selection = "未"
    Selection.Font.ColorIndex = 3 ' "未" の文字色 
   End If
  Else
   MsgBox ("パスワードが違います。")
  End If
  Cancel = True
 End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
46 1つの数字を打ち込んだらEnterキー押さないでも、右隣のセルに移動させるには
 http://www.keep-on.com/excelyou/2001lng5/200102/01020042.txt
  「1桁数字を1個のセルに入力するときにリターンキーを押さないで入力する方法」【その他ラウンジ】
 http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200612/06120037.txt
  「Enterを押さずに、ワークシートに1桁の数値入力していくには」
下の2種類のコードを使用します。入力モードを直接入力にして下さい。
Private Sub Worksheet_Activate()
 Dim i As Integer
 For i = 0 To 255
  Select Case i
   Case Asc("0") To Asc("9")
    Application.OnKey Chr(i), "'nextrow """ & Chr(i) & """'"
    Application.OnKey "{" & i + 48 & "}", "'nextrow """ & Chr(i) & """'"
'   a〜z、A〜Zにも対応する場合、次の2行も使います。
'   Case Asc("A") To Asc("Z"), Asc("a") To Asc("z")     
'    Application.OnKey Chr(i), "'nextrow """ & Chr(i) & """'"
  End Select
 Next i
End Sub
Private Sub Worksheet_Deactivate()
 Dim i As Integer
 For i = 0 To 255
  Select Case i
   Case Asc("0") To Asc("9")
    Application.OnKey Chr(i)
    Application.OnKey "{" & i + 48 & "}"
'   a〜z、A〜Zにも対応する場合、次の2行も使います。
'   Case Asc("A") To Asc("Z"), Asc("a") To Asc("z")
'    Application.OnKey Chr(i)
  End Select
 Next i
End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。

Sub nextrow(str As String)
 ActiveCell = str
 If ActiveCell.Column = 256 Then Beep: Exit Sub
 ActiveCell.Offset(0, 1).Select
End Sub

   このコードの使い方は、マクロの使い方(1)標準モジュールにあります。   
   このマクロの場合は、標準モジュールを実行する必要はありません。
   上のコードを貼り付けたシート以外のシートを一旦選択した後、再度戻って入力するだけで実行します。
   ※ 右隣ではなく下に移動させる場合は、
       
ActiveCell.Offset(0, 1).Select の部分を ActiveCell.Offset(1, 0).Select に変更します。

範囲を指定する場合。(C〜R列に対応)入力モードを直接入力にして下さい。
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
 Dim i As Integer
 'C〜R列の範囲のみ
 If Target.Column > 2 And Target.Column < 19 Then
  For i = 0 To 255
   Select Case i
    Case Asc("0") To Asc("9")
     Application.OnKey Chr(i), "'nextrow """ & Chr(i) & """'"
     Application.OnKey "{" & i + 48 & "}", "'nextrow """ & Chr(i) & """'"
   End Select
  Next i
 Else
  For i = 0 To 255
   Select Case i
    Case Asc("0") To Asc("9")
     Application.OnKey Chr(i)
     Application.OnKey "{" & i + 48 & "}"
   End Select
  Next i
 End If
End Sub
Private Sub Worksheet_Deactivate()
 Dim i As Integer
 For i = 0 To 255
  Select Case i
   Case Asc("0") To Asc("9")
    Application.OnKey Chr(i)
    Application.OnKey "{" & i + 48 & "}"
  End Select
 Next i
End Sub
  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。

Sub nextrow(str As String)
 ActiveCell = str
 If ActiveCell.Column = 256 Then Beep: Exit Sub
 ActiveCell.Offset(0, 1).Select
End Sub

   このコードの使い方は、マクロの使い方(1)標準モジュールにあります。   
   このマクロの場合は、標準モジュールを実行する必要はありません。
   上のコードを貼り付けたシート以外のシートを一旦選択した後、再度戻って入力するだけで実行します。
   ※ 右隣ではなく下に移動させる場合は、
       
ActiveCell.Offset(0, 1).Select の部分を ActiveCell.Offset(1, 0).Select に変更します。

下の2種類のコードを使用します。入力モードを直接入力にして下さい。
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 With Application
    'キーボードのコード
   .OnKey "1", "'NextCell 1'"
   .OnKey "2", "'NextCell 2'"
   .OnKey "3", "'NextCell 3'"
   .OnKey "4", "'NextCell 4'"
   .OnKey "5", "'NextCell 5'"
   .OnKey "6", "'NextCell 6'"
   .OnKey "7", "'NextCell 7'"
   .OnKey "8", "'NextCell 8'"
   .OnKey "9", "'NextCell 9'"
   .OnKey "0", "'NextCell 0'"
   'テンキーのコード
   .OnKey "{97}", "'NextCell 1'"
   .OnKey "{98}", "'NextCell 2'"
   .OnKey "{99}", "'NextCell 3'"
   .OnKey "{100}", "'NextCell 4'"
   .OnKey "{101}", "'NextCell 5'"
   .OnKey "{102}", "'NextCell 6'"
   .OnKey "{103}", "'NextCell 7'"
   .OnKey "{104}", "'NextCell 8'"
   .OnKey "{105}", "'NextCell 9'"
   .OnKey "{96}", "'NextCell 0'"
  End With
 End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
 Sub NextCell(ByVal Index As Integer)
  With ActiveCell
   .Value = Index
   If .Column = 256 Then Beep: Exit Sub
    .Offset(0, 1).Select
  End With
 End Sub

   このコードの使い方は、マクロの使い方(1)標準モジュールにあります。   
このマクロの場合は、標準モジュールを実行する必要はありません。
上のコードを貼り付けたシートで、入力するだけで実行されます。
   ※ 右隣ではなく下に移動させる場合は、
       
.Offset(0, 1).Select の部分を .Offset(1, 0).Select に変更します。
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim ALen As Integer, i As Integer
 Dim MySt As String
 With Target
  If Not IsNumeric(.Value) Then Exit Sub
  ALen = Len(.Value)
  If .Column + ALen > 256 Then
   MsgBox "最大入力列を超えてしまいます。", 48
   Exit Sub
  End If
  .Value = "'" & .Value
  For i = 1 To ALen
   MySt = MySt & "[" & Mid(.Value, i, 1) & "]"
  Next i
  .Parse MySt
 End With
End Sub
  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
47 全シートの保護と解除
http://www.keep-on.com/excelyou/2001lng1/200104/01040138.txt
  「sheetを保護してオートフィルター機能を使用」 【編集ラウンジ】
Sub 保護の設定()
 Dim Sh As Worksheet
 x = Application.InputBox("バスワードを入力して下さい", Type:=3)
 For Each Sh In Worksheets
  Sh.Protect (x)
 Next Sh
End Sub
Sub 保護の解除()
 Dim Sh As Worksheet
 On Error GoTo ErLine
 Do
  x = Application.InputBox("バスワードを入力して下さい", Type:=3)
 Loop While x = "False"
 For Each Sh In Worksheets
  Sh.Unprotect Password:=x
 Next Sh
 Exit Sub
ErLine:
 y% = MsgBox("パスワードが違います ! 終了します", 48)
End Sub

   このコードの使い方は、マクロの使い方(1)標準モジュールにあります。   
48 メール返信用の引用記号を挿入
1. 受け取ったメールの画面で Ctrl+A → Ctrl+C で全文をコピーします。
2. マクロを実行すると、アクティブなシートのA列に、引用記号をつけて表示します。
   ※ マクロ(下のコード)の書き方と、実行の仕方は、マクロの使い方(1)標準モジュールにあります。
3. マクロ終了時には変換後のデータがクリップボードにコピーされてるので、
  そのままメモ帳や返信メールの画面に貼り付けます。
Sub 引用記号追加()
 On Error GoTo er1
 With ActiveWorkbook.ActiveSheet
  .Select
  .Cells.ClearContents
  .Range("A1").Select
  .PasteSpecial Format:="テキスト", Link:=False, DisplayAsIcon:=False
  With .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)).Offset(0, 1)
   .FormulaR1C1 = "=IF(TRIM(RC[-1])="""","""","">""&TRIM(RC[-1]))"
   .Copy
   .PasteSpecial xlValues
  End With
  .Columns(1).Delete
  With .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
   .Copy
  End With
 End With
 Exit Sub
er1:
 MsgBox "コピーしてから実行してください"
End Sub

   このコードの使い方は、マクロの使い方(1)標準モジュールにあります。   
49 フォルダ内の全てのファイル名をセルに表示するには
My Documents内の全て(下位フォルダ内を除く)のExcelファイル名を、アクティブなシートのA列に表示します。
 Sub test()
 Dim BookName As String, PathName As String, i As Integer
 PathName = "C:\My Documents\"
 BookName = Dir(PathName & "*.xls")
 Do Until BookName = ""
  i = i + 1
  Cells(i, 1) = BookName
  BookName = Dir()
 Loop
End Sub

   このコードの使い方は、マクロの使い方(1)標準モジュールにあります。   
50 変数名の規則
使える文字 英字(大文字小文字は区別しません)、カタカナ、ひらがな、漢字
使えない文字 【スペース】、【ピリオド(ドット . )】、【感嘆符!)】、【@】、【&】、【$】、【#】
使えない単語 VBAで使用している【関数】、【ステートメント】、【メソッド】
文字数 半角で255文字以内。全角、半角の混合も可、ただし全角は半角の2文字分。
  名前の先頭は必ず文字にする
同じプロシージャの中で、同じ名前の変数は使用できません。
51 順列組み合せ
下のように、果物が全部で10個の場合の組み合わせ数を全て表示します。任意の個数を指定できます。
 りんご みかん イチゴ メロン すいか
   0     0     0     0    10
   0     0     0     1     9
   0     0     0     2     8
     途   中   省   略
   9     0     1     0     0
   9     1     0     0     0
  10     0      0          0          0

Sub Kumiawase()
 Dim i As Integer, j As Integer, k As Integer
 Dim m As Integer, n As Integer
 Dim x As Long, y As Integer

 Cells.ClearContents
 Cells(1, 1) = "りんご"
 Cells(1, 2) = "みかん"
 Cells(1, 3) = "イチゴ"
 Cells(1, 4) = "メロン"
 Cells(1, 5) = "すいか"

 On Error Resume Next
 Do
  y = InputBox("何個買いますか?", "?", 10)
  If Err <> 0 Then Err = 0: Exit Sub
  y = Int(y)
  If y <= 0 Then
    Exit Sub
  Else
   Exit Do
  End If
 Loop
 On Error GoTo ErrH

 x = 2

 For i = 0 To y
  Application.StatusBar = i
  For j = 0 To y
   For k = 0 To y
    For m = 0 To y
     For n = 0 To y
      If i + j + k + m + n = y Then
      Cells(x, 1).Value = i
      Cells(x, 2).Value = j
      Cells(x, 3).Value = k
      Cells(x, 4).Value = m
      Cells(x, 5).Value = n
      x = x + 1
     End If
     Next
    Next
   Next
  Next
 Next
 
 MsgBox ("End")
 Application.StatusBar = False
 Exit Sub
 
ErrH:
 
 Err = 0
 On Error GoTo 0
 Application.StatusBar = False
 MsgBox ("オーバーフローしました。")
 
End Sub

52 セルの中でタブキーを押したときに任意の数のスペースを空け、
                  そのままセル内に続けて入力するには?
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200106/01060120.txt
  
「セルの中でタブを使うには?」 【編集ラウンジ】
 Sub TAB開始()
  Application.OnKey "{TAB}", "TAB設定"
 End Sub
 Sub TAB解除()
  Application.OnKey "{TAB}"
 End Sub
 Sub TAB設定()
  ActiveCell.Value = ActiveCell.Value & "   "  
 'TABを押した時に入れたい任意の数のスペースを入れます
  SendKeys "{F2}"
 End Sub

   このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
   設定を実行する場合、
TAB開始」のマクロを実行してください。
こちらの
「OnKeyメソッドのマクロを、他のシート、他のファイルで実行させない為にはもあわせてご覧ください。
53 合計金額、合計個数を指定して、すべての組み合わせを表示したい
以下のように、Sheet1に入力して実行すると、Sheet2に結果を表示します。

***** Sheet1 *****

     A        B        C        D        E        F
1   商品1    商品2    商品3    商品4    商品5    商品6
2    9800      8800      7800      7000      6800      5800

***** Sheet2 *****

     A       B      C      D     E      F      G        H        I         J      K       L          M       N
1        商品1   商品2    商品3        商品4      商品5      商品6         合  計
2      9800     8800     7800         7000        6800      5800     19 133400
3  0     0  0    0   1  7800   16  112000  2  13600  0    0
4  0     0  0    0  2 15600  11    77000   6  40800  0    0

コードの使い方ですが、
 1. Alt+F11 で、VBEの画面を出します。
 2. 左側のプロジェクト-VBAProjectで、該当するファイルを選択します。
   VBAProjectが出ていなければ、Ctrl+R で出します。
 3. [挿入]、[標準モジュール]、出てきた白い所に、コードを貼付けます。
 4. 右上の × でExcelの画面に戻ります。
 5. Alt+F8 でマクロの名前を選んで、実行します。

Sub miko_test()
 Dim i As Long, j As Long, k As Long, shou As Long
 Dim m As Long, n As Long, o As Long, myRange As Range
 Dim x As Long, y As Long, z As Long, a As Long
 Dim kingaku(6) As Long, soku(6) As Long
 Sheets("Sheet2").Select
 With Sheets("Sheet1")
  Cells.ClearContents
  Cells(1, 1) = .Cells(1, 1)
  Cells(1, 3) = .Cells(1, 2)
  Cells(1, 5) = .Cells(1, 3)
  Cells(1, 7) = .Cells(1, 4)
  Cells(1, 9) = .Cells(1, 5)
  Cells(1, 11) = .Cells(1, 6)
  Cells(1, 13) = "合  計"
  Cells(2, 2) = .Cells(2, 1)
  Cells(2, 4) = .Cells(2, 2)
  Cells(2, 6) = .Cells(2, 3)
  Cells(2, 8) = .Cells(2, 4)
  Cells(2, 10) = .Cells(2, 5)
  Cells(2, 12) = .Cells(2, 6)
  kingaku(1) = .Cells(2, 1)
  kingaku(2) = .Cells(2, 2)
  kingaku(3) = .Cells(2, 3)
  kingaku(4) = .Cells(2, 4)
  kingaku(5) = .Cells(2, 5)
  kingaku(6) = .Cells(2, 6)
  With Range("A1:N2").Font
   .Size = 12
   .ColorIndex = 5
   .Bold = True
  End With
  Set myRange = .Range("A2:F2")
  shou = Application.WorksheetFunction.Min(myRange)
  On Error Resume Next
  Do
   y = InputBox("合計金額を入力してください?", "?", 133400)
   z = InputBox("合計足数を入力してください?", "?", 19)
   If Err <> 0 Then Err = 0: Exit Sub
   y = Int(y)
   z = Int(z)
   If y < shou Or z < 1 Then
    Exit Sub
   Else
    Cells(2, 14) = y
    Cells(2, 13) = z
    Exit Do
   End If
  Loop
  On Error GoTo ErrH
  x = 3
  For i = 0 To y Step kingaku(1)
   soku(1) = i / kingaku(1)
   For j = 0 To y Step kingaku(2)
    soku(2) = j / kingaku(2)
    For k = 0 To y Step kingaku(3)
     soku(3) = k / kingaku(3)
     For m = 0 To y Step kingaku(4)
      soku(4) = m / kingaku(4)
      For n = 0 To y Step kingaku(5)
       soku(5) = n / kingaku(5)
       For o = 0 To y Step kingaku(6)
        soku(6) = o / kingaku(6)
        If i + j + k + m + n + o = y And _
         soku(1) + soku(2) + soku(3) + soku(4) + soku(5) + soku(6) = z Then
         Cells(x, 2).Value = i
         Cells(x, 4).Value = j
         Cells(x, 6).Value = k
         Cells(x, 8).Value = m
         Cells(x, 10).Value = n
         Cells(x, 12).Value = o
         Cells(x, 1).Value = soku(1)
         Cells(x, 3).Value = soku(2)
         Cells(x, 5).Value = soku(3)
         Cells(x, 7).Value = soku(4)
         Cells(x, 9).Value = soku(5)
         Cells(x, 11).Value = soku(6)
         x = x + 1
        End If
       Next
      Next
     Next
    Next
   Next
  Next
 End With
 Exit Sub
ErrH:
 Err = 0
 On Error GoTo 0
 MsgBox ("オーバーフローしました。")
End Sub

   このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
54 セルを選択したとき、F2を押さずに自動的に編集状態にするには?
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200107/01070038.txt
  
「常に「編集」の状態にするには?」 【編集ラウンジ】
Excel2002確認済
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  SendKeys "{F2}"
 End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
55 セルの中で、複数の単語を間隔を空けてきれいに整列させて表示するには?
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200106/01060120.txt
  
「セルの中でタブを使うには?」 【編集ラウンジ】
Excel2002確認済
(1)図のように、当該シートのA1セルに、TABの長さに相当する半角スペースの数を記入しておきます。
   間隔を空けたい所まで入力したら、スペースを押してください。Enterで決定後、等間隔に表示します。
    プロポーショナルフォント以外(MS 明朝、MS ゴシック)で実行してください。
   
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim s As String, s1 As String
    Dim sLen As Integer, sp As Integer
    Dim n As Integer, m As Integer
     
    On Error Resume Next
    s = Target.Value
    If Err <> 0 Then Exit Sub
    
    sLen = Len(s)
    s1 = Left(s, 1)
  
' すでにスペースが連続している場合には、それを一つだけにしておく
    If sLen >= 3 Then
        For n = 2 To sLen
            If (Right(Left(s, n), 1) = Chr(32) _
                Or Right(Left(s, n), 1) = Chr(-32448)) _
                And (Right(Left(s, n - 1), 1) = Chr(32) _
                Or Right(Left(s, n - 1), 1) = Chr(-32448)) Then
                s1 = s1
            Else
                s1 = s1 & Right(Left(s, n), 1)
            End If
        Next
        Application.EnableEvents = False
        Target.Value = s1
        Application.EnableEvents = True
    End If
 
 ' 改めてスペースを挿入
    s = Target.Value
    If Err <> 0 Then Exit Sub
    sLen = Len(s)
    s1 = ""
    
    sp = Cells(1, 1).Value
    If Err <> 0 Then Err = 0: sp = 6   
 ' スペースの数が適当でないときは6とする
    If sp > 20 Then sp = 20            
 ' 同じく20を越えていたら20とする
    If sp < 1 Then sp = 1               
' 同じく1未満なら1とする
        
    m = 0
    For n = 1 To sLen
        If Right(Left(s, n), 1) = Chr(32) _
            Or Right(Left(s, n), 1) = Chr(-32448) Then
            If m = sp Then m = sp - 1
          
' 指定のスペース数から文字数分を引いてスペース挿入
            s1 = s1 & Space(sp - m)
            sLen = sLen + sp - m
            m = 0
        ElseIf Right(Left(s, n), 1) = Chr(10) Then
            s1 = s1 & Chr(10)
          ' 文字が LineFeed ならカウンタをリセット
            m = 0
        Else
            s1 = s1 & Right(Left(s, n), 1)
          
' 文字の全/半角により、挿入スペース数を変える
            If Asc(Right(Left(s, n), 1)) < 0 Then   
' 全角
                m = m + 2
            Else                                    
' 半角
                m = m + 1
            End If
        End If
    Next
    
    Application.EnableEvents = False
    Target.Value = s1
    Application.EnableEvents = True
    On Error GoTo 0
End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
56 シートを保護した状態で、ロックしていないセルの書式等が変更できません。
http://cgi.fuji.ne.jp/~fj2094/cgi-bin1/wwwlng.cgi?print+200107/01070157.txt
  
「特定のセルを保護すると他のセルの編集ができない。」 【編集ラウンジ】
Excel2002確認済
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Selection.Locked = True Then     
 '選択範囲にロックがかかっている場合
     ActiveSheet.Protect            
'シートを保護する
   ElseIf Selection.Locked = False Then    
'選択範囲にロックがかかっていない場合
     ActiveSheet.Unprotect           
'シートの保護を解除する
   End If
 End Sub

  このコードの使い方は、マクロの使い方(2)該当するシートのモジュールにあります。
57 選択範囲のセルを、縦方向に結合するには
Excel2002確認済
 Sub 縦方向にセルを結合()
  Dim a As Long, b As Integer, aa As Integer, bb As Integer, aaa As String, i As Integer
  a = Selection.Row
  b = Selection.Column
  aa = Selection.Rows(Selection.Rows.Count).Row
  bb = Selection.Columns(Selection.Columns.Count).Column
  For i = b To bb
   Range(Cells(a, i), Cells(aa, i)).Select
   Selection.Merge
  Next
 End Sub

   このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
58 個数・方向を指定して結合するには
Excel2002確認済
 Sub miko_test()
  Dim k As Integer, ko As Integer, a As Integer, ho As String
  Dim i As Integer, j As Integer, m As Integer
  On Error GoTo er1
  k = Application.InputBox(prompt:="何個づつのセルを結合しますか?", Default:=2, Type:=1)
  If k = 0 Then Exit Sub
  ko = Application.InputBox(prompt:="何組の結合セルを作りますか?", Default:=3, Type:=1)
  If ko = 0 Then Exit Sub
  ho = InputBox(prompt:="現在のセルの右または左から結合します。どっちの方向に結合しますか?" _
     & Chr(10) & " " & Chr(10) & " 1)縦方向  2)横方向", Default:=1)
  If ho = 1 Then
        '縦方向の結合
   i = ActiveCell.Row + 1
   j = ActiveCell.Column
   Range(Cells(i, j), Cells(i + k * ko - 1, j)).UnMerge
   For m = i To i - 1 + k * ko Step k
    Range(Cells(m, j), Cells(m + k - 1, j)).Merge
   Next
  End If
  If ho = 2 Then        
'横方向の結合
   i = ActiveCell.Row
   j = ActiveCell.Column + 1
   Range(Cells(i, j), Cells(i, j + k * ko - 1)).UnMerge
   For m = j To j - 1 + k * ko Step k
    Range(Cells(i, m), Cells(i, m + k - 1)).Merge
   Next
  End If
 er1:
 End Sub

   このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
59 ツールバー・メニューバー、タイトルバーの右クリックメニューを表示、非表示を切り替えるには?
http://www.keep-on.com/~excelyou/2000lng4/200007/00070249.txt
  「右ボタンを使用不可にする方法を教えて下さい」 【VBAラウンジ】
Excel2002確認済
 Sub メニューバー、ツールバーの右クリックメニュー表示切替()
  Dim CB As CommandBar
  Dim CBP As CommandBarPopup
  Set CB = Application.CommandBars("Worksheet Menu Bar")
  Set CBP = CB.Controls("表示(&V)").Controls("ツールバー(&T)")
  CBP.CommandBar.Enabled = Not CBP.CommandBar.Enabled
  Set CB = Nothing
  Set CBP = Nothing
 End Sub

   このコードの使い方は、マクロの使い方(1)標準モジュールにあります。
Excel2002確認済
 Const GWL_STYLE = -16&
 Const WS_SYSMENU = &H80000
 Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
 (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
 (ByVal hwnd As Long, ByVal nIndex As Long) As Long
 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
 (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

 Sub システムメニュー消去() 'タイトルバーの右クリックメニューを消す
  Dim lngHwnd As Long
  Dim lngNewLong As Long
  Dim ret As Long
  lngHwnd = FindWindow("XLMAIN", Application.Caption)
  lngNewLong = GetWindowLong(lngHwnd, GWL_STYLE)
  ret = SetWindowLong(lngHwnd, GWL_STYLE, lngNewLong Xor WS_SYSMENU)
 End Sub

 Sub システムメニュー復活()
  Dim lngHwnd As Long
  Dim lngNewLong As Long
  Dim ret As Long
  lngHwnd = FindWindow("XLMAIN", Application.Caption)
  lngNewLong = GetWindowLong(lngHwnd, GWL_STYLE)
  ret = SetWindowLong(lngHwnd, GWL_STYLE, lngNewLong Or WS_SYSMENU)
 End Sub

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

60 マウスでの、ドラッグ、ドロップを禁止するには?
http://www.ae.wakwak.com/~efc21/cgi-bin/wwwlng.cgi?print+200109/01090073.txt
  「行挿入・行削除・コピー・ペーストだけ禁止するには。」 【VBAラウンジ】
Sub test()
 Application.CellDragAndDrop = False
   'マウスでのドラッグ&ドロップを禁止
 Application.CellDragAndDrop = True   
'禁止を解除
End Sub

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

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

このページのTOPへ     

 

 

 

inserted by FC2 system