Excelマクロで選択範囲内の数値の合計をクリップボードにコピーする方法

このQ&Aのポイント
  • Excelのマクロを使用すると、選択範囲内の数値の合計をクリップボードにコピーすることができます。
  • ただし、このマクロを呼び出すたびにエラーが発生し、手動で「Microsoft Forms 2.0 Object Library」を参照設定する必要があります。
  • マクロ内で「Microsoft Forms 2.0 Object Library」を自動で参照設定する方法はありませんか?
回答を見る
  • ベストアンサー

Excelのマクロで選択範囲内の数値の合計をクリップボードにコピーする

Excelのマクロで選択範囲内の数値の合計をクリップボードにコピーするマクロとして以下をメニューから呼び出せるようにしています。 が、呼び出すたびにエラーが出て、手動で「Microsoft Forms 2.0 Object Library」を参照設定しています。マクロ内で「Microsoft Forms 2.0 Object Library」を自動で参照設定ONにするようにはできないでしょうか。 --- Sub SumCopy() Dim MyData As DataObject Set MyData = New DataObject MyData.SetText Application.WorksheetFunction.Sum(Selection), 1 MyData.PutInClipboard End Sub ご存知の方がいらっしゃればご教授よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.1

参照設定が消えてしまうのですか? 一応下記で対応ができると思います。 ※すでに参照設定されている場合はエラーになります。   On Error Resume Next 命令を入れた方が良いかも知れません。 ※参照設定はフルパスで指定しますので、OSや環境により変わるかも知れません。   Sub 参照設定()  ThisWorkbook.VBProject.References.AddFromFile ("C:\Windows\system32\FM20.DLL") End Sub

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

以下のようにすれば、クリップボード・オブジェクトを作れます。 一般のクリップボードを使いたければ、Win32 APIのほうが便利かもしれません。 '// Public myData As Object Sub SumCopyR()  Const clsid_DATAOBJECT As String = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"  If myData Is Nothing Then   Set myData = CreateObject("new:" & clsid_DATAOBJECT)  End If  myData.SetText Application.WorksheetFunction.Sum(Selection), 1  myData.PutInClipboard End Sub '// ClassID は、以下のようにして検索しました。 検索語:DataObject HKEY_CLASSES_ROOT\CLSID\{1C3B4210-F441-11CE-B9EA-00AA006B1A69} Microsoft Forms x.x DataObject (こちらは、RegSeekerを利用)

関連するQ&A

  • アクセスvbaでクリップボードにコピーの動作を実行

    アクセスvbaでクリップボードにコピーの動作を実行したいです。 エクセルなら、 Sub test() Dim buf As String Dim CB As New DataObject buf = "test" With CB .SetText buf ''変数のデータをDataObjectに格納する .PutInClipboard ''DataObjectのデータをクリップボードに格納する .GetFromClipboard ''クリップボードからDataObjectにデータを取得する Debug.Print .GetText ''DataObjectのデータを変数に取得する End With End Sub これが実行できるのですが、 どうやらアクセスだと Dim CB As New DataObject これがエラーになるようです。 Dim CB As Objectにすると .SetText buf で実行時エラー91になります。 (「オブジェクト変数またはWithブロック変数が設定されていません」) http://officetanaka.net/excel/vba/tips/tips20.htm によると、 「DataObjectオブジェクトはMSFormsのメンバです。使用するには、Microsoft Forms 2.0 Object Libraryを参照設定します。または、ブックにUserFormを挿入すると自動的に参照設定されます。」 なので、アクセスvbaの参照設定で「Microsoft Forms 2.0 Object Library」を探したのですが、 ありませんでした。 当方バージョンは2010です。 アクセスでは不可能と言うことでしょうか? ご教授よろしくお願いします。

  • 選択範囲の合計値をクリップボードへコピー

    エクセルで選択範囲の合計をクリップボードにコピーするマクロを作成し、メニューもしくはショートカットに割り当てようと思っています。 下記でやってみたのですが、うまくいきません。いい方法をご存知の方、ご教授願います。 Sub ClipSum() Dim temp As Variant temp = Application.WorksheetFunction.Sum(Selection) Range("IV1").Value = temp Range("IV1").Copy Range("IV1").ClearContents End Sub

  • エクセルVBAでセル範囲のデータをクリップボードに

    セル範囲のデータをテキストとしてクリップボードに取り込みたいのです。 http://okwave.jp/qa/q5650002.html#16327676 の回答ANo2を見て Sub test01() Dim myData As DataObject Dim myCb As Variant Dim x x = "TESTデータです。" Set myData = New DataObject myData.SetText x myCb = myData.GetText myData.PutInClipboard End Sub は出来ました。 そこで、セル範囲A1:B3をクリップボードに貼ろうといろいろやってみました。 一応、下記でできましたが、実際にはもっと広い範囲を取り込みたいので、もっと簡単な方法はないでしょうか? Sub Clip() Dim myStr As String Dim myData As DataObject Dim myCb As Variant Set myData = New DataObject With Sheets(1) myStr = .Range("A1").Value & ":" & .Range("B1").Value & _ vbNewLine & .Range("A2").Value & ":" & .Range("B2").Value & _ vbNewLine & .Range("A3").Value & ":" & .Range("B3").Value End With myData.SetText myStr ', 1 myCb = myData.GetText If MsgBox("データ" & vbNewLine & myCb & " をクリップボードに送りますか? ", vbYesNo + vbQuestion, "確認") = vbNo Then Exit Sub End If myData.PutInClipboard End Sub

  • Excelのマクロについて

    文字列から数値だけを抽出するマクロを見つけたのですが、抽出するデータを選択してから実行しなければなりませんでした。 抽出するデータはAセル以下にしかないので、データを選択しないでも実行できるようにするにはどうしたら良いのでしょうか? 宜しくお願いします。 以下見つけたマクロです。  Sub test()  Dim mydata As String  Dim c As Range  Dim i As Integer  For Each c In Selection   mydata = ""  For i = 1 To Len(c)   If Mid(c, i, 1) >= 0 And Mid(c, i, 1) <= 9 Then   mydata = mydata & Mid(c, i, 1)    End If   Next   c.Offset(0, 1) = mydata   Next  End Sub

  • wordのマクロでクリップボードの処理

    WORD文書上に、「c:\....jpg」という画像へのアドレスが複数あるとします。そのアドレスを画像に差し替えたいのですがうまくいきません。。 とりあえずマクロでまず「c:\\*jpg」で検索をかけて、文字列をコピー、その文字列を使って図の挿入をしようと思っています。 Sub Macro1() Dim 画像 Selection.Find.ClearFormatting With Selection.Find .Text = "C:\\*jpg" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Selection.Copy ※クリップボードの内容を変数「画像」へ代入 Selection.Delete Unit:=wdCharacter, Count:=1 Selection.InlineShapes.AddPicture FileName:= _ 画像, LinkToFile:=False, SaveWithDocument:= _ True End Sub 以上が今考えているマクロなんですが、※の部分で変数「画像」へクリップボードから代入をする処理がどうにもうまくいきません。 wordのマクロは初めていじるのでよくわかりません。 どなたかわかる方教えてください。よろしくお願いします。

  • SPREAD.netで選択セルの合計を求めるには

    お世話になります。 環境は、SPRED.net + vb2005 です コードの中でスプレッドの関数を使いたいのですが いろいろ調べましたが分かりません。 ご存知の方、ご教示お願いいたします。 たとえば、EXCELでは、こんな感じです。 Sub test() Dim r As Range Set r = Selection MsgBox Application.WorksheetFunction.Sum(r) End Sub よろしくお願いします。

  • エクセル マクロで行の合計を数値で入力したい

    マクロ初心者です。 F列からAJ列までの合計をAK列に数値で入力しようとしています。 ただし、FからAJ列の各セルに全てデータは入っていません。 したがってFからAJ列のいずれかにデータが入っている最終行を 見つけて合計を算入しようとしているのですが下記の通りやっても うまくいきません。教えてください。 エクセルのバージョンは2002です。 Sub () 'データが入っている最終行まで合計額を数字で入力 LastRow = Cells(65536, COL).End(xlUp).Row For i = LastRow To 6 Step -1 Set myRange = Range(Cells(i, 6), Cells(i, 36)) Cells(i, 37).Value = WorksheetFunction.Sum(myRange) Next i End Sub

  • 選択範囲に黒の格子を付けるマクロ

    マクロ記録をつかって、選択している範囲に黒の格子を付けるマクロをボタンを作成しました。 (質問の下に、記録した内容を添付します) 実際に、格子を作るのには不要な行がたくさんあると思うのですが、不要な箇所をどう見つければいいのか教えてください。 個人的には、with以下の構文は標準設定しているだけなので不要かと思うのですが、何度も設定されていてくどく感じられます。 記録した後に、一括してこれらの記録を消す方法があればあわせて教えてください。 --- Sub 格子マクロ() Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End Sub

  • Excel VBA 図をクリップボード介さずコピー

    Excelシートのアイコンの画像をクリップボードを使わずにコピーするVBAコードを教えてください。 (Windows10,Excel2016) 具体的には、 1) Sheet1を選択する。 2) 挿入タブのアイコンをクリックする。 3) しばらくするとアイコンの挿入のウインドウが表示される。 4) アクセシビリティに9つのアイコンが表示されているので   一番左のアイコンをクリックしてチェックマークを付けて   右下の挿入ボタンをクリックする 5) Sheet1に車椅子のアイコンが挿入される(左側の図参照)。 6) このアイコンを選択すると左上のボックスにグラフィックス 1と表示される。 VBAで、Sheet1のシートの車椅子のアイコンをコピーして、 Sheet2のシートの同じ位置に貼り付ける場合、 以下のようなコードでは、 四角形全体が塗りつぶされたアイコンになってしまいます(右側の図参照) 車椅子のアイコンにするにはどのように記述すればよいでしょうか。 ------------------------------------- Sub test()  Dim myType As MsoAutoShapeType  Dim myLeft As Integer  Dim myTop As Integer  Dim myWidth As Integer  Dim myHeight As Integer  Sheets("sheet1").Select  Sheets("sheet1").Shapes("グラフィックス 1").Select    myType = Selection.ShapeRange.AutoShapeType  myLeft = Selection.ShapeRange.Left  myTop = Selection.ShapeRange.top  myWidth = Selection.ShapeRange.Width  myHeight = Selection.ShapeRange.Height  Sheets("sheet2").Select  ActiveSheet.Shapes.AddShape(myType, myLeft, myTop, myWidth, myHeight).Select End Sub -------------------------------------

  • ExcelでWithEventsが記述できない

    クラスモジュールに下記のように記述すると、赤く表示されエラー状態になります。 Dim WithEvents text as string WithEvents を削除するとエラーが解消されます。WithEventsについて色々検索しましたが 原因が分かりません。 何か参照設定等が必要なのでしょうか。ご存じの方教えてください。 ちなみに、バージョンはExcel2003 で、参照可能なライブラリは現在つぎのとおりです。 Visual Basic For Applications Microsoft Excel 11.0 Object Library OLE Automation Microsoft Office 11.0 Object Library Microsoft Forms 2.0 Object Library Microsoft ActiveX Data Objects 2.8 Library Microsoft Visual Basic for Applications Extensibility 5.3

専門家に質問してみよう