Excel VBAについて Ver.2.0

このエントリーをはてなブックマークに追加
948944:04/02/25 11:56
>>946,947

ありがとうございました。
実装できました。
949超初心者:04/02/25 16:00
すいません テクニックを教えてください。
エクセルのマクロに ある関数を作りまして
シートのセルから フォーカスが別のセルに移った時に
この関数を呼び出ししたいのですが どなた様かおしえてください
950デフォルトの名無しさん:04/02/25 17:34
>949

シートモジュールの、セレクションチェンジイベントプロシージャを使えばよろし。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'ここにプロシージャの名前を書こう。
End Sub
951超初心者:04/02/25 17:58
>>950
解りやすい説明をありがとうございました。無事解決しました。
952甲羅のカメ:04/02/25 19:25
16進数の"E291"を10進数に変換して"58001"を表示させたいと思っています。
Val関数を使って変換させるのだと思いますが、Val("&hE291")とすると"-7535"になってしまいます。
なにか良い方法はあるのでしょうか?
教えてください。
HEX2DECでHELPしてみ
954カメ:04/02/25 22:20
どうもありがとうございます。
さっそく明日に試してみます。
955デフォルトの名無しさん:04/02/26 09:03
教えて君で申しわけないのですが、
Do Loopを記述してデバックは、無いのに
処理が何も起こらないのです。
下記のコードの何処がおかしいのでしょう?
Sub Sample4_64()
Dim cnt As Long, i As Long
i = 1
Do While Cells(i, 1) <> ""
i = i + 1
cnt = cnt + 1
If cnt > 1000 Then
MsgBox "1000回処理したので処理を中止します"
Exit Do
End If
Loop

End Sub

セルになにも書いてないんじゃね?
957955:04/02/26 10:58
>>956
すいません。初心者なんで・・・。
著書ではセルAに123と書いてあって、1000回処理してるみたいです。。
真似してみましたが、わかりません。
例えば、何を書けばいいのでしょう?
958955:04/02/26 11:08
>>956
ファイルをうpしますから、教えて君で申しわけないですが
良かったら、教えてください。
名前は955としておきました。
ttp://ptba2.hp.infoseek.co.jp/cgi-bin/up/bbs.cgi
959955:04/02/26 11:15
こんな初心者なのでダウンロードしてもウィルスとか入れてないです。
てか、作れません。
なにがしたいマクロなのか、よくワカランが
A1〜A1000までにテキトーになんか書いて実行してみそ
961デフォルトの名無しさん:04/02/26 13:55
渡された文字列が、数字であるか否かを
判断する方法を、諸賢方、教えてくだされ。
isnumeric?
http://pc2.2ch.net/test/read.cgi/tech/1069530956/408-409n
どなたかお助けを_| ̄|○
964デフォルトの名無しさん:04/02/26 20:14
Excelじゃなくて、PowerPointのVBAなんですが、
CreateTextFileでUnicodeをTrueにしてファイルを作ると、
UTF-16で出力されます。
そうじゃなくて、UTF-8で出力することはできるでしょうか?
後から変換かけるんじゃなくて、VBA内だけでできると嬉しいのですが。
WindowsでUnicodeといったらUTF-16LEBOM付きですからなぁ
966デフォルトの名無しさん:04/02/27 00:25
Excel2001で、以下のプロシージャを実行すると
Falseになるんですが...。助言キボンヌ。
Public Sub test()
Dim MyCheck
MyCheck = "a2a" Like "a#a"
MsgBox MyCheck
End Sub
967955:04/02/27 09:47
>>960
コピー機能を使って1000以上になったところで
マクロを実行したら出来ました。
有難う御座います。
968966:04/02/27 11:53
Excel2002で試したらTrueだったので、
Excel2001のバグのようです。
(´・ω・`)ショボーン
969デフォルトの名無しさん:04/02/27 13:44
セルA1に1が演算によって書き込まれたとき、
セルA2の文字(今回は白なので2)とセル自体の色(今回は赤なので3
)を変更できる仕掛けを考えております。

またセルA1に0が演算によって書き込まれたときは、
標準の設定に戻すこともできないかと悩んでおります。
どなたかご教授いただければ幸いです。
970デフォルトの名無しさん:04/02/27 16:38
>969
意味不明。 だれか通訳希望。

おそらく、こういう事でしょうか?
セルA1に”1”が入れば、セルA2の”文字の色を白(CollorIndex=2)””セル自体の色を赤(CollorIndex=3)”にする。
セルA1に”0”が入れば、セルA2の”文字の色を黒(CollorIndex=1)””セル自体の色を白(CollorIndex=2)”にする。
971デフォルトの名無しさん:04/02/27 16:52

もし>>970の内容のことをやりたいのなら、
VBAなんか使わなくても、簡単にできるんだから、
悩む前に、ちょっと調べればいいのに。
972969:04/02/27 18:13
>>971

「条件付き書式設定」ですね。ありがとうございます。
973デフォルトの名無しさん:04/02/28 14:30
昨日から悩んでいます。誰か教えてください。

とびとびにデータが入ったシートのデータが入っている最終行と
最終列をしりたいのです。
びっちりデータが入ったものなら以下のように取得できるのは
わかるのですが。空白が任意の位置にあるようなシートでは
どうすればいいのでしょうか?
eRow = Worksheets(1).Range("A65536").End(xlUp).Row
eCol = Worksheets(1).Range("A1").End(xlToRight).Column

よろしくお願いします。
974デフォルトの名無しさん:04/02/28 16:08
L列に、上から順番にいろいろな数字が書き込まれています。
一番最後に書かれている行を取得したいのですが、VBAでどのようにやればいよでしょうか?
>>974
一つ上のカキコが見えないのかと。
976974:04/02/28 16:17
あぁぁすみません、上のやってみたらできました。。
977デフォルトの名無しさん:04/02/28 16:22
>>973

eRow = Range("a1").SpecialCells(xlCellTypeLastCell).Row
eCol = Range("a1").SpecialCells(xlCellTypeLastCell).Column

これでいかがでしょうか。
978973:04/02/28 19:47
>977 うまくいってるみたいです。ありがとうございました。

ついでに教えてチャンですみませんが、エクセルの2つのシートを比較
して、その差分をとるのにいい方法はありませんか?
最終列と行のループでぶん回して、異なっているデータセルのみを色付きで表示
するマクロを作ってみましたが、速度が遅くていまいち気に入りません。
979977:04/02/28 20:24
>>973
つまり、違ったデータのセルに色をつければいいんだよね?
やっぱ、ループになっちゃいましたが、これでも重いですか?

Dim GYO As Long, RETU As Long, eRow As Long, eCol As Long, Dif As Integer
eRow = Range("a1").SpecialCells(xlCellTypeLastCell).Row
eCol = Range("a1").SpecialCells(xlCellTypeLastCell).Column
Dif = 0
For RETU = 1 To eCol
For GYO = 1 To eRow
If Sheets(1).Cells(GYO, RETU).Value <> Sheets(2).Cells(GYO, RETU).Value Then
Sheets(1).Cells(GYO, RETU).Interior.ColorIndex = 3
Sheets(1).Cells(GYO, RETU).Font.ColorIndex = 2
Sheets(2).Cells(GYO, RETU).Interior.ColorIndex = 3
Sheets(2).Cells(GYO, RETU).Font.ColorIndex = 2
Dif = Dif + 1
Else
Sheets(1).Cells(GYO, RETU).Interior.ColorIndex = xlNone
Sheets(1).Cells(GYO, RETU).Font.ColorIndex = 0
Sheets(2).Cells(GYO, RETU).Interior.ColorIndex = xlNone
Sheets(2).Cells(GYO, RETU).Font.ColorIndex = 0
End If
Next
Next
If Dif > 0 Then
MsgBox Dif & "ヶ所に違いがあります。"
ElseIf Dif = 0 Then
MsgBox "違いはありません。"
Else
MsgBox "Error", vbCritical
End If
980973:04/02/28 21:43
>977 だいたいそんな感じでやってます。

想像していたより遅かったのが嫌だったけど、使用に耐えないほど
ではないのでまあいいかとも思ってます。

レスさんきゅーでした。
981デフォルトの名無しさん:04/02/28 23:06
印刷範囲の設定で
Worksheets("sheet1").PageSetup.PrintArea = "a1:d5"
とやったのですが、D5の部分の5をLastRowに入っている数値にしたいのですが、
どのように設定すればよいのでしょうか?
= "a1:d(LastRow)" とか試してみたのですがわかりません。
982977:04/02/28 23:47
>>981

Dim LastRow As Long

LastRow = Range("D65536").End(xlUp).Row

ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, 4)).Address


これでいかがでしょうか。
983デフォルトの名無しさん:04/02/29 17:02
質問なのですが、
VBAからエクセルで開いたCSVファイルのコントロールは不可能なのですか?
例えば、任意の行の全セル・データのコピーとか・・・
お知りの方がいましたらお願いします。
マクロ記録してみればいいんじゃないかなぁ。
985デフォルトの名無しさん:04/02/29 21:08
初心者ですいません。デバックはちゃんと出来てるのですが、
「オブジェクトはこのプロバティまたはメソッドをサポートしていません」
とエラーになります。
何がおかしいのでしょうか?ついでにファイルも、うpしておきます。
名前は「教えて君」タイトルが「VBA」です。
宜しく御願いします。


Sub Sample4_71()
Dim i As Long
For i = 1 To 100
If Cells(i, 1) = "田中" Then
MsgBox Cells(i, 1).Adderss & "見つかりました"
Exit For
End If
Next i
End Sub

ttp://taisstu.hp.infoseek.co.jp/cgi-bin/up/imgboard.cgi
>>985
RangeにAddressなんてメンバはない?
987977:04/02/29 21:16
いや、Addressのスペルが間違ってるだけ。

いかがでしょうか?
>>987
なるほど、こう言うのをコンパイル時に指摘してくれないのがVBの怖いところだな。
989981:04/02/29 21:53
>>982
たすかりました!
990985:04/02/29 22:36
>>987
有難う御座いました。
991デフォルトの名無しさん:04/02/29 22:42
すみません
時間がなくて過去ログあんまりちゃんと読んでないのだけど
既出だったら誘導してください
いま明日までにやらなくちゃいけなくててんぱってます

エクセルのソルバーアドインを1行ずつ使っていくマクロをつくったのだけど
このままでやると一回ソルバーを使うごとに

探索結果 解を記入する OK

とかいうダイアログが出てきてわざわざリターンをおさなくてはなりません
このOKをおすまでのマクロをつくりたいのだけど記録しても出てきません
どうしたらよいでしょうか?
おしえてください

992977:04/02/29 23:19
>>991
ソルバーは使ったことないのでわからんが、
ソルバーを使うコードの前に
Application.DisplayAlerts = False
と書けばいいと思う。

これでいかがでしょうか。
993991:04/02/29 23:26
>>992
やってみましたがうまくいきません

ダイアログが出てきてしまいます

やっぱり一発ずつリターンを打たなくてはならないのでしょうか?
4万行ちかくあるのでどうしても何とかしたいのですが・・・

なきそう
よくわからんけど、配列はできないのか?
995977:04/02/29 23:42
>>991
SolverSolveっていう記述を
SolverSolve(True)に変えてみてください。
996991:04/02/29 23:54
うまくいきましたーーー
今動かしてるところです
本当にどうもありがとうございました
助かりました
997デフォルトの名無しさん
Sub test()
' 配列の平均を計算
' 平均以外にも最大値、最小値、標準偏差なども求める予定

    Dim a As Variant
    Dim n As Long
    Dim i As Long

    n = 10000 ' データ数
    ReDim a(1 To n, 1 To 1)

    For i = 1 To n
        a(i, 1) = Int(Rnd() * 1000)
    Next

    Range("A1:A" & n).Value = a
    Range("B1").Value = WorksheetFunction.Average(Range("A1:A" & n)) ' 方法1
    Range("C1").Value = WorksheetFunction.Average(a) ' 方法2
End Sub

上記のような関数を作りました。
n = 1000では方法1、方法2の両方ともきちんと平均が計算されます。
しかし、n = 10000の場合、方法2では
「実行時エラー '13': 型が一致しません。」
となります。

それでお尋ねしたいことが2点あります。
・方法2の記述にはどこか問題があるのか?
・これら2つの方法以外に配列の平均を求める方法はあるのか?

教えて、偉いしと。