>>946 ,947
ありがとうございました。
実装できました。
すいません テクニックを教えてください。 エクセルのマクロに ある関数を作りまして シートのセルから フォーカスが別のセルに移った時に この関数を呼び出ししたいのですが どなた様かおしえてください
950 :
デフォルトの名無しさん :04/02/25 17:34
>949 シートモジュールの、セレクションチェンジイベントプロシージャを使えばよろし。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'ここにプロシージャの名前を書こう。 End Sub
>>950 解りやすい説明をありがとうございました。無事解決しました。
952 :
甲羅のカメ :04/02/25 19:25
16進数の"E291"を10進数に変換して"58001"を表示させたいと思っています。 Val関数を使って変換させるのだと思いますが、Val("&hE291")とすると"-7535"になってしまいます。 なにか良い方法はあるのでしょうか? 教えてください。
HEX2DECでHELPしてみ
どうもありがとうございます。 さっそく明日に試してみます。
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
セルになにも書いてないんじゃね?
>>956 すいません。初心者なんで・・・。
著書ではセルAに123と書いてあって、1000回処理してるみたいです。。
真似してみましたが、わかりません。
例えば、何を書けばいいのでしょう?
こんな初心者なのでダウンロードしてもウィルスとか入れてないです。 てか、作れません。
なにがしたいマクロなのか、よくワカランが A1〜A1000までにテキトーになんか書いて実行してみそ
961 :
デフォルトの名無しさん :04/02/26 13:55
渡された文字列が、数字であるか否かを 判断する方法を、諸賢方、教えてくだされ。
isnumeric?
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
>>960 コピー機能を使って1000以上になったところで
マクロを実行したら出来ました。
有難う御座います。
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なんか使わなくても、簡単にできるんだから、
悩む前に、ちょっと調べればいいのに。
>>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でどのようにやればいよでしょうか?
あぁぁすみません、上のやってみたらできました。。
977 :
デフォルトの名無しさん :04/02/28 16:22
>>973 eRow = Range("a1").SpecialCells(xlCellTypeLastCell).Row
eCol = Range("a1").SpecialCells(xlCellTypeLastCell).Column
これでいかがでしょうか。
>977 うまくいってるみたいです。ありがとうございました。 ついでに教えてチャンですみませんが、エクセルの2つのシートを比較 して、その差分をとるのにいい方法はありませんか? 最終列と行のループでぶん回して、異なっているデータセルのみを色付きで表示 するマクロを作ってみましたが、速度が遅くていまいち気に入りません。
>>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
>977 だいたいそんな感じでやってます。 想像していたより遅かったのが嫌だったけど、使用に耐えないほど ではないのでまあいいかとも思ってます。 レスさんきゅーでした。
981 :
デフォルトの名無しさん :04/02/28 23:06
印刷範囲の設定で Worksheets("sheet1").PageSetup.PrintArea = "a1:d5" とやったのですが、D5の部分の5をLastRowに入っている数値にしたいのですが、 どのように設定すればよいのでしょうか? = "a1:d(LastRow)" とか試してみたのですがわかりません。
>>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なんてメンバはない?
いや、Addressのスペルが間違ってるだけ。 いかがでしょうか?
>>987 なるほど、こう言うのをコンパイル時に指摘してくれないのがVBの怖いところだな。
991 :
デフォルトの名無しさん :04/02/29 22:42
すみません 時間がなくて過去ログあんまりちゃんと読んでないのだけど 既出だったら誘導してください いま明日までにやらなくちゃいけなくててんぱってます エクセルのソルバーアドインを1行ずつ使っていくマクロをつくったのだけど このままでやると一回ソルバーを使うごとに 探索結果 解を記入する OK とかいうダイアログが出てきてわざわざリターンをおさなくてはなりません このOKをおすまでのマクロをつくりたいのだけど記録しても出てきません どうしたらよいでしょうか? おしえてください
>>991 ソルバーは使ったことないのでわからんが、
ソルバーを使うコードの前に
Application.DisplayAlerts = False
と書けばいいと思う。
これでいかがでしょうか。
>>992 やってみましたがうまくいきません
ダイアログが出てきてしまいます
やっぱり一発ずつリターンを打たなくてはならないのでしょうか?
4万行ちかくあるのでどうしても何とかしたいのですが・・・
なきそう
よくわからんけど、配列はできないのか?
>>991 SolverSolveっていう記述を
SolverSolve(True)に変えてみてください。
うまくいきましたーーー 今動かしてるところです 本当にどうもありがとうございました 助かりました
997 :
デフォルトの名無しさん :
04/03/01 08:07 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つの方法以外に配列の平均を求める方法はあるのか? 教えて、偉いしと。