新生活!引っ越してから困らないように注意すべきことは?>>

質問のタイトル通りです。
VBAのソース中でオートSUMボタンを使用した時と同じ処理をさせたいと思っています。
どのようにすれば可能でしょうか?

A 回答 (4件)

>自動記録をしてもオートSUMの結果のみしか記録してくれないので、出来ません。



つまりActiveCell.FormulaR1C1 = "=SUM(R[-11]C:R[-1]C)"のように範囲が固定で出てしまうから違うセルでは使えないと言ってるのでしょうか?
だったら、Range(Selection, Selection.End(xlUp))とかで範囲を取得したらどうでしょうか?(このままでは文字列も入ってしまいましが)
    • good
    • 0
この回答へのお礼

selection.endはなかなかの妙案だと思いましたが、
やはりオートSUMと同じ事をする事は出来ないという感じですね。
今作りたい物は一つの列の中に数列とSUM関数が混ざっていたら、そのSUM関数の値だけを合計してくれるとか、結構ややこしい物だったりするので、それでは実現不可能っぽいです。

VBAの中に「オートSUMボタンを押した時と同じ処理をする」というコマンドが無いようだと言う事でも参考になりました。

お礼日時:2009/03/01 18:57

邪道かもしれませんが。


Sub Test()
SendKeys "+%=", True
SendKeys "^{Enter}", True
End Sub
    • good
    • 0

>自動記録をしてもオートSUMの結果のみしか記録してくれないので、出来ません。



変ですね。私がマクロの自動記録したときは、結果ではなく、数式が記録されましたが。
    • good
    • 0

マクロの自動記録が参考になると思います。

    • good
    • 0
この回答へのお礼

自動記録をしてもオートSUMの結果のみしか記録してくれないので、出来ません。
自動的に空白手前まで範囲選択してくれるとか、SUBTITLE関数だけを選んでSUM計算してくれるとか

お礼日時:2009/02/22 15:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルマクロ オートSUM(合計)式の挿入

データの最下行の下にエクセルのマクロで列の合計(オートSUM)を挿入したいです。
毎作業ごとに最下行が異なるので、「マクロの記録」では上手くいきません。
(毎回式の選択範囲を変えなければならなくなるため)
ご教授頂きたく、よろしくお願いします。

Aベストアンサー

一例です。
C列の最終行にSUM関数を設定しています。
endrow = Cells(Rows.Count, "C").End(xlUp).Row
Cells(endrow + 1, "C").Formula = "=sum(C1:C" & endrow & ")"

QExcel VBAの SUM関数について質問です。

Excel VBAの SUM関数について質問です。

SUM関数で合計の値を出す場合、

SUM(A1:A5)という関数で合計を出しますが

SUM(sheet2.cells(1,1),sheet2.cells(5,1))
と言ったようにCellsで指定はできないのでしょうか?

複数の列にVBAのプログラムで合計の値を出したいのです。

WorksheetFunction.SumではSUM(A1:A5)のように
自動計算にならないと思うので・・・

Aベストアンサー

例えば、Sheet2のA6セルに質問の数式を入力するのであれば次のようにします。
Worksheets("Sheet2").Cells(6, 1).Formula = "=SUM(" & Cells(1, 1).Address & ":" & Cells(5, 1).Address & ")"

Sheet1のような別シートのA1セルに質問の数式を入力するのであれば次のようにします。
Worksheets("Sheet1").Cells(1, 1).Formula = "=SUM(Sheet2!" & Cells(1, 1).Address & ":" & Cells(5, 1).Address & ")"

QEXCEL VBAで全選択範囲の解除

EXCEL VBAで
Cells.Select
と書くと、全セルが選択状態になりますが、
これを解除するには、どう書けばよいのでしょうか?

Aベストアンサー

その1
A1 など、適当なセルを選択する。
(回答#1と同じ)

その2
全選択する前の選択範囲に戻る。

全選択前に
変数 = Selection.Address で記憶

全選択後
Range(変数).Select で元の選択範囲を選択

QExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。

以下のようなプログラムをVBAで作成したいと考えています。

A1のセルに値があれば、その値をB1に返す。
次にA2のセルに値があれば、その値をB2に返す。
A行に値がある一番下のセルまで同じようなことをさせたいと考えています。

VBAは初心者です。
どなかた宜しくお願い致します。

Aベストアンサー

#2さんと似たものですが・・・・参考にしてください。

Sub test001()
Dim i As Long
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 2) = Cells(i, 1)
i = i + 1
Loop
End Sub

Qエクセルマクロで合計を計算したい

いつもお世話になっています

可変な範囲を変数で取得して、合計を計算できるでしょうか

  A  B C D
 1   5
 2   8
 3   3
 4   7
 5    <-----ここ 「B5」に合計値を出したい

但し、データが可変するので常に「B5」とは限らず「B7」等の時もある

これをマクロで自動取得してそのデータの下に合計を出したいのですが
お願いいたします。

(”合計”・"H行番号" ・"L行番号")を変数として取得。。。。。

Range("合計").Formula = "=sum(B & H行番号 : B & L行番号)"

なんてのを実行したのですが、当然のことながらダメでした。

Aベストアンサー

こんな感じでどうでしょうか。B列の例です。

Sub SumSet()
  Dim strRetu As String '列名
  Dim endRow As Long '最終行

  strRetu = "B"
  '最終行を求める
  endRow = Range(strRetu & "65536").End(xlUp).Row

  '算式をセットする
  Range(strRetu & (endRow + 1)).Formula = _
          "=SUM(" & strRetu & "1:" & strRetu & endRow & ")"
End Sub

Q特定の条件の時に行を挿入したい

EXCEL2000使っています。A列データがあるとして、A3セルに特定の数字(例えば1)があるときは、その上の行、このときは 2行に1行挿入したいのですが、各行ごとに挿入するのは大変なので、簡単に、できるだけ一度に挿入する方法はないですか?

Aベストアンサー

#1です。VBAで
Sub test01()
i = 1
p01:
If Cells(i, "A") = "" Then Exit Sub
If Cells(i, "A") = 1 Then
Cells(i, "A").Insert (xlDown)
i = i + 1
End If
i = i + 1
GoTo p01
End Sub
少数例テストでは上手く行きましたが。
データ行の中間に空白行がないこと。
If Cells(i, "A") = 1 Thenの1は、実際の場合の値に
変えてください。
元データのシートはコピーを取って、テストをしてください。編集の元に戻すが効かないと思いますから。

QExcelのVBAで文章にある複数の同じ文字列の位置をそれぞれ取得したい

下記のような記述だと1つめのsampleの位置(9文字目)は取得できても
2つめのsample(25文字目)の位置を取得することができません。
どうすれば2つめの文字列の位置を取得することができるのでしょうか?

moji = "This is sample text for sample."
n = InStr(moji, "sample")

使用OS:Windows XP
使用ソフト:Microsoft Excel 2003

ご存知の方がおられましたらご回答をよろしくお願いします。

Aベストアンサー

下記のどちらとも取れる表現だ。
質問例からは(2)かな。
(1)セルの探索
マクロの記録状態にして、操作で、編集ー検索をやってみて、記録されたコードをみて、自分の場合はどこを、どう修正したらよいか考え、疑問が多分残るだろうから、それに絞って質問する。
普通の質問はこっちの方だが。
ーー
(2)1セル内
>文章にある複数の同じ文字列の位置をそれぞれ
1セル内の文字列内の2度目以降の出現を聞いているのか
その場合は繰り返しを行い、nが0になった場合でInstr実行を終了する。下記のInstrの探索のスタートポイント(下記でs)を活用するのがミソだ。
Sub test01()
a = Cells(1, 1)
s = 1
Do
n = InStr(s, a, "dr")
If n = 0 Then Exit Sub
MsgBox Mid(a, n, 2)
s = n + 1
Loop
End Sub
探索しているのが、語句なら上例で「dr+スペース」などを考えれば
よいかもしれない。

QVBA エンターキーでイベントに入りたい。

テキストボックスにデータ入力後エンターキーの押下でイベントに入りたいのですが、下記のコーディングで[通過]メッセージが表示されません。英数字は通過しますが、エンターキーは動作停止します。
これと全く同じコーディングでVB6は正しく動きます。(ただし、Pvate Sub text1_KeyPress(KeyAscii As Integer)に変更してます。)
<コーディング>
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Msgbox "通過"
If KeyAscii = vbKeyReturn Then
KeyAscii = 0
End If
End Sub

これが出来ると、そのつどキーボードから手を離さずに済むので作業効率がグンとあがります。どうかよろしくご教示ください。Excel2003SP3

Aベストアンサー

こんにちは。

>ご指摘のオブジェクトとプロシージャは間違いないことを確認しています。(TextBox1,keyPress)コードのロジックはこれ以上簡単に書きようがないほど単純明快です。

>Excelで実際にこのコードを実行していただけませんか。

ご自身のコードが間違いがないと思い込んでいられるから、そういう発言をされるのだと思いますが、ここでのお話の前提は、あくまでも、VBAです。VB6ではありません。

私が、期待通りの反応を示さないので、「実際にこのコードを実行してください」とおっしゃっているようですが、はっきり言えば、その最初のコードは、VBAでは間違っています。それに気がついてください。

質問のコードのままのコードでは、Enter キーのイベントは、取れないのです。別にPCの故障でもソフトの問題でもないし、こちらが試していないわけでもありません。

Visual Basic とVBAは、細かい点で違います。

VBAのこの種のイベントの KeyAscii では、VB6 で取れる、EnterキーのKeyAsciiの 「13」 は、取れません。 KeyAscii は、MSForms.ReturnIntegerとなって、Integer ではありません。

だから、私は、その代わりとして、KeyDown イベントを使えばよいとしているわけなのです。

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 If KeyCode = vbKeyReturn Then
  MsgBox "Enterキーが入りました", 64
  'KeyCode =0
 End If
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 MsgBox "通過"
End Sub

こんにちは。

>ご指摘のオブジェクトとプロシージャは間違いないことを確認しています。(TextBox1,keyPress)コードのロジックはこれ以上簡単に書きようがないほど単純明快です。

>Excelで実際にこのコードを実行していただけませんか。

ご自身のコードが間違いがないと思い込んでいられるから、そういう発言をされるのだと思いますが、ここでのお話の前提は、あくまでも、VBAです。VB6ではありません。

私が、期待通りの反応を示さないので、「実際にこのコードを実行してください」とおっしゃってい...続きを読む

QエクセルVBA 「On Error GoTo 0」について

「On Error GoTo 」ステートメントの意味は、だいたい理解しています。
「On Error GoTo 0」 ステートメントについて、ご教授お願いします。
参考書には「エラーのトラップ処理を無効にする」と載っていましたが、よくわかりません。
具体的にどのような使い方をするのか、簡単なコードで説明していただければ幸いです。
よろしくお願いします。

Aベストアンサー

#3の回答者ですが、コードのどこが原因か特定し、実行時エラーとして、そのエラーが不可避な場合において、On Error Resume Next を付けますから、On Error Goto ErrHandler よりも、扱い方が難しいです。当然、その部分だけの範囲を囲うので、On Error Goto 0 を入れると思いますし、今では、使う場面が限定されているはずです。

後はテキストを参考にしてください。当面、このようなコードが必要になることはないと思いますが。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。


人気Q&Aランキング