EXCELの97、2000、XPの相違点て何がある? こんどVBAでプログラムくむことになったんだが・・・ 注意しないといけないことあったら教えてくれ
特に関数とかフォームとかについてお願いします。
困ってから聞きにこい。 でなきゃ金払って講習会受けて来い。
4 :
デフォルトの名無しさん :02/06/11 10:07
∧_∧ ((
( ´Д`) ) )
/ \ ノ
| | | \ (( ((
| | /⌒|⌒|ヽ二二つ ) ) 丿パチパチ
ヽ二二Ο./ \ (( ( ノノ
(_| |_| |_ \ ∴∵ ←
>>1 .(__)__) //》||ヾミ\
Officeのバージョン混在環境は死のかほり。
>>1 よ聞いてくれ
俺には母親と1つ違いの妹がいる。
残念ながら俺の父親は俺が小さいときに愛人を作り蒸発した。
俺は父親の顔は覚えていない。
しかし母親の小さい背中に支えられ、貧乏ながらも幸せな生活を送っていた。
しかし俺が小学校6年の時の誕生日の日に母親は暴走したトラックに惹かれて死んだ。
そして俺と妹は親戚の家に預けられた。
はじめは不安だったが、俺には厳しかった義理父だが、
妹にはやさしく接してくれ俺は本当に安心できた。
しかしそこの義理父が妹の誕生日の日に、俺の前で妹を犯した。
妹がまだ女になる前にだ。
俺は本当に怒りを覚えたが、義理父に逆らうと生活が出来ないため、
泣きじゃくる妹をただ見つめることしか出来なかった。
そして俺は中学生なのに、仕事もしない義理父の変わりに仕事に行かされろくに勉強もできなかった。
そして15歳の時に家を追い出された、このときは残された妹が本当に心配だった。
しかし、妹も1年後に家を逃げてきて、苦しい思いをしていたようだが
2人で笑顔で生活することが出来るようになった。
少年期は非常に苦労したが、それが今心の糧となって貧乏ながら一生懸命生きている。
以上、この話は嘘だ。
9 :
名無しさん@Emacs :02/07/02 02:53
適当なスレがどこか良く分からなかったのですが、とりあえずここで。 (A列の値) * (B列の値)を C列に入れる場合、 for i=0 to 100 Range("C" & i).value = Range("A" & i).value * Range("B" & i).value next i ってやると、著しく遅いんですが、何か良い方法は無いでしょうか? たぶん文字列の結合が余計な処理なんじゃないかとは思うのですが・・・
10 :
デフォルトの名無しさん :02/07/02 03:56
こんなんどう?
ちょっとは早くなりそうな気はするけど。
For i = 1 To 101
Cells(i, 3).Value = Cells(i, 1).Value * Cells(i, 2).Value
Next i
実際
>>9 のと実際に比べてみたけど、
>>9 もそんなに遅くはなかったってのは付け加えときま。
11 :
デフォルトの名無しさん :02/07/02 04:30
>>9 マクロの記録って知ってる?
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2002/7/2 ユーザー名 : ********
'
'
ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
Range("C1").Select
Selection.AutoFill Destination:=Range("C1:C100"), Type:=xlFillDefault
Range("C1:C100").Select
End Sub
12 :
デフォルトの名無しさん :02/07/02 04:48
>>9 スマソ。式じゃなくて計算結果を代入しなければならないのね。
でも式の採用も検討しちくり。
13 :
デフォルトの名無しさん :02/07/02 15:56
excelVBAて役に立つの? まえにアホ元SE(COBOLER)が自慢してたんだけど。 60歳こえている頭がいかれた爺だからしかたないんだけど。
14 :
デフォルトの名無しさん :02/07/02 16:01
>>13 仕事でバリバリ使っている。俺の仕事は工学系で、結果をすぐにグラフ
にしてカット&トライしながらやっていくのだが、EXCEL VBAは超便利。
速度は遅いけどね。
>9,10 どーもです。10さんのアイデアをいただいて、早い処理をマクロ記録して、 それを改造してコードをくんだらだいぶ速くなりました。 ありがとうございました。
16 :
VBA暦7年 :02/07/05 00:09
オブジェクトの参照は著しく遅くなるので一度変数に読み込むべし。 プログラムは基本的に ・読込 ・計算 ・出力 の3部構成にすべし。これ基本。 Application.ScreenUpdating=False Dim dblX as Double, dblY as Double, dblZ as Double '読込 dblX=Cells(1,1).Value dblY=Cells(2,1).Value '計算 dblZ=dblX*dblY '出力 Cells(3,1).Value=dblZ 大量データ処理だとぜんぜん速度違うし、プログラムもスキーリ。
17 :
デフォルトの名無しさん :02/07/05 00:13
本屋で売ってるExcel VBAの本なんか、ほとんどがクズばっかりだ。 半人前のくせして本書くな。
18 :
VBA暦7年 :02/07/05 00:15
↑そだね。本当に役に立ったのは大村あつしの1冊しかなかった。
19 :
デフォルトの名無しさん :02/07/05 00:18
>>18 大村あつしでもまだ不足だ。
Microsoft公式の上級者向けでないと。
いいんだよ、どうせ素人向けなんだから。
21 :
デフォルトの名無しさん :02/07/05 00:21
クラスをまともに扱った本って見たことないな。 大体がチャートオブジェクトでイベント拾いたいとかで 呪文みたいにサンプルリスト出してあるだけ。
22 :
VBA暦7年 :02/07/05 00:21
>>19 読んだことなかったです。今度読んでみよっと。
23 :
デフォルトの名無しさん :02/07/05 00:25
漏れはexcelVBAでwin32api呼び出して、グラフィック表示させるプログラムを作らされました。 もうむちゃくちゃ。
24 :
VBA暦7年 :02/07/05 00:25
速度向上のポイントとしては ・Application.ScreenUpdating ・Application.Calculation ・Cellを極力参照しない くらいかな。
25 :
デフォルトの名無しさん :02/07/05 00:31
遅くてもええやん。 どうせ金になるスキルじゃないんだから。
26 :
デフォルトの名無しさん :02/07/05 00:38
Excelの仕事って、確かに金額だけ見てると安いけど、うまくやると利益率高いの多いね. ぽっと出の案件ばっかで継続性が無いのがアレだけど。
セルへの大量データの貼り付けは クリップボードを使うと速いよ
昔はクリップボードって32kの制限があったのだが・・・ 今はもう無いのかな。 あぁ、DDEの方が速いよ・・・ふぅ。
30 :
VBA暦7年 :02/07/06 00:39
>>1 97と2000でドロップダウンコンボ(だったっけ?)コントロールの仕様がビミョーに異なっていたと思ふ。
ユーザーフォームの動作確認は厳重にしる。
あと、WorkSheetをMoveするとオブジェクト変数がオブジェクトを見失うというバグらしきものが2000にはあった。sp2あたりで治ったかな。
31 :
VBA暦7年 :02/07/06 00:47
>>27 たしかに継続性がない。仕様書がない。予算がない。
Excelの仕事ってワークグループ向けで、エンタープライズ向けではないからお金にはならない。
ニッチなお仕事ね。
32 :
デフォルトの名無しさん :02/07/12 09:11
誰かExcel2002のスタッフロールの出し方を知りませんか?
みんなVBAとか語ってはいるものの、EXCEL20002のスタッフロールを出す方法 知ってるような人はいないのかな? (EXCEL2000はすでに知ってるから・・・2002の方法を教えて下さい)
34 :
デフォルト名無しさん :02/07/12 18:00
保険会社で新商品を開発したりする場合に滅茶苦茶使うよ、EXCELVBA。 アクチュアリーの必需品。
みんなVBAとか語ってはいるものの、EXCEL20002のスタッフロールを出す方法 知ってるような人はいないのかな? (EXCEL2000はすでに知ってるから・・・2002の方法を教えて下さい)
>>29 Accessのデータシートビューの数1000〜1万件のオーダーのレコードがメモリ不足にも
ならずにコピペできるのだから、32Kが上限であるはずがない。
37 :
デフォルトの名無しさん :02/07/19 10:51
すんません。excel初心者です。 excelのVBAからexe形式の他の実行ファイルを 呼び出す方法を教えてください。
>37 Shell関数をちぇけらっ
39 :
デフォルトの名無しさん :02/07/19 12:32
ありがとうです。 できれば、非同期でなく同期で、 アプリからの戻り値を取得したいのです。
>>39 API使ってもできるけど、VBAからwshを呼び出すという手もある
Set WShell = CreateObject("WScript.Shell")
rc = WShell.Run("notepad", , True) '第3引数がtrueなら同期
41 :41 :Over 40 Thread このスレッドは40を超えました。 もう書けないけど、新しいスレッドは立てないでくださいです。。。
42 :
デフォルトの名無しさん :02/07/21 00:30
エクセルVBAでローカルIPアドレス取得する方法ってあります? ちょっと困ってます。誰か教えて。
43 :
デフォルトの名無しさん :02/07/22 00:36
age
>>41 Private Declare Sub vbMemMove1 Lib "kernel32" Alias "RtlMoveMemory" (dst As Any, ByVal src As Long, ByVal num As Long)
Private Declare Sub vbMemMove2 Lib "kernel32" Alias "RtlMoveMemory" (dst As Long, ByVal src As Long, ByVal num As Long)
Private Declare Function gethostname Lib "wsock32.dll" (ByVal Name As String, ByVal namelen As Long) As Long
Private Declare Function gethostbyname Lib "wsock32.dll" (ByVal Name As String) As Long
Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVersionRequested As Integer, lpWSAData As Any) As Long
Private Declare Function WSACleanup Lib "wsock32.dll" () As Long
Private Declare Function WSAGetLastError Lib "wsock32.dll" () As Integer
' IPアドレスを取得
Public Function GetIpAddress() As String
Dim wsa As WSADATA
Dim sName As String * 65
Dim he As hostent
Dim p As Long
Dim b(3) As Byte
If WSAStartup(&H101, wsa) <> 0 Then Exit Function
If gethostname(sName, 64) = 0 Then
p = gethostbyname(sName)
If p <> 0 Then
vbMemMove1 he, p, 16
vbMemMove2 p, he.h_addr_list, 4
vbMemMove1 b(0), p, 4
GetIpAddress = b(0) & "." & b(1) & "." & b(2) & "." & b(3)
End If
End If
WSACleanup
End Function
45 :
デフォルトの名無しさん :02/07/22 02:07
EXCELVBAで組むと簡単なマスタデータとかはワークシートに持てるし EXCEL入ってればどこでも開発できるからツールとか、VBアプリのプロト とか作るのに重宝する。 ただし、エンドユーザにリリースしちゃうのは、勝手にEXCELバージョン アップされちゃったりするのでちょっと慎重になる。 >42 shell関数でipconfig.exe /batch temp.txtで出力するか 40みたいにWSH使って標準出力から拾って、その後IPアドレス だけ切り出すがよろし。
47 :
デフォルトの名無しさん :02/08/02 20:38
Excel VBA 厨房です。 エラー処理にひっかかったら Excel を落とすってことで、Application.Quit を使ってるんですけど、Application.Quit 以下の文が実行されてしまいます。 Application.Quit って C で言う exit() みたいな使い方できないんですか?
Application.Quit 以下の文が実行されてしまいます。 がよくわからんが、 ビジネスsoft板逝ったほうがいいと思うぞ。
50 :
デフォルトの名無しさん :02/08/12 18:05
次のバージョンはC#ですか?
51 :
デフォルトの名無しさん :02/08/12 23:28
エクセルからXML吐き出すのに、これはいいってのあるかい?
52 :
デフォルトの名無しさん :02/08/12 23:30
フツーに出してるのXMLもどきじゃなかったっけ?
53 :
デフォルトの名無しさん :02/08/17 19:25
EXCEL20002のスタッフロールを出す方法教えてください
54 :
デフォルトの名無しさん :02/08/25 22:15
>>9 もう見てないとは思うが。
16よ、知ってたらちゃんと教えろよ。
Sub Sample1()
Dim a
Dim b() As Double
Dim i As Long
With Range("A1:A100")
a = .Resize(, 2).Value
ReDim b(1 To UBound(a), 0)
For i = 1 To UBound(a)
b(i, 0) = a(i, 1) * a(i, 2)
Next
.Offset(, 2).Value = b
End With
End Sub
Sub Sample2()
With Range("A1:A100")
.Copy Range("c1")
.Offset(, 1).Copy
.Offset(, 2).PasteSpecial Operation:=xlMultiply
End With
Application.CutCopyMode = False
End Sub
スマソ、上はインデントが入ってない。
笑われる前に訂正。 Sub Sample2() With Range("A1:A100") .Copy .Offset(,2) .Offset(, 1).Copy .Offset(, 2).PasteSpecial Operation:=xlMultiply End With Application.CutCopyMode = False End Sub
アプリケーションからのメッセージを無視してそのまま動作させる方法を教えてください。 例えばエクセルで、 ActiveWindow.SelectedSheets.Delete とやってシートを削除するときに、 「もとに戻せないよ」って警告がでますよね? これを無視したいのですが。
>>58 Application.DisplayAlerts = False
61 :
デフォルトの名無しさん :02/08/30 17:17
excelのVBAで矢印(shape)を描画する時の座標系はポイントですけど、 この座標系ってセルの罫線の太さによって微妙にセルの位置とずれますよね。 cellとshapeの位置をきっちり対応させる方法ってあるのでしょうか?
62 :
デフォルトの名無しさん :02/08/30 18:08
61>> rangeで選んでheightでポイントをゲット (すいません自己レスでした)
63 :
デフォルトの名無しさん :02/08/30 18:14
アクセルのVBAでどれくらいのプログラムが組めますか?
>63 メモリの許す限り
>58 その後Trueにしときや。いちおー。 Application.DisplayAlerts = False ActiveWindow.SelectedSheets.Delete Application.DisplayAlerts = True
66 :
デフォルトの名無しさん :02/08/31 19:52
67 :
デフォルトの名無しさん :02/08/31 22:31
セルをクリックするとValueに○が入る仕掛けを実装したいのですが、 セルを左シングルクリックしたときだけイベントを起こすには、 どうしたらいいのでしょうか? ワークシート上での右クリックや ダブルクリックのイベントはすぐ見つかりましたが、ただの クリックとキーボードイベントだけが見当たらなくて、非常に 困っています。
68 :
デフォルトの名無しさん :02/08/31 22:39
オセロか囲碁でもつくるのかい?
>>68 とある地学系観測データシート作成システムの構築です。お客さん
からは「左クリックで○を入れ、右クリックで消去」さらに「範囲
選択後、左クリックで選択範囲を全て○に、右クリックで全消去」
と申し渡されていますが、上記問題がボトルネックになって、
ちっとも作業が進まないんです・・・。
70 :
デフォルトの名無しさん :02/08/31 23:38
>>69 SelectionChangeとかじゃだめ?
>>66 63が開発した有名なソフトだ。静かに見届けてやれ......。
ひそかにアクセルつーのは2ch用語かと思っていた俺・・・。
>>70 SelectionChangeをそのまま使うと、キーボードでカーソル移動
しただけで○が書き込まれてしまいます。というか、誤植の原因に
なるから何とかしてくれとお客さんにお叱りを受けました。
CTRL押しながらクリックしたら...とか譲歩案にもってけよ!
75 :
デフォルトの名無しさん :02/08/31 23:54
つーか、これくらい自分で出来ない客はクソだな
76 :
デフォルトの名無しさん :02/09/01 00:03
>>73 そしたら、WinAPIロードして、マウスクリックイベント捕まえたら?
ここにも記入させていただきます。 CommandBarに以下のようにして、 CommandBarComboBoxを追加しました。 Dim CB As CommandBar Dim CBCtrl As CommandBarControl Set CB = Application.CommandBars("Worksheet Menu Bar") Set CBCtrl = CB.Controls("挿入(I)").Controls("一括挿入").Controls.Add(Type:=msoCo ntrolEdit) With CBCtrl .Caption = "挿入縦サイズの設定" End With このとき、Type:=msoControlEditですので、 記入欄に文字をかきこむことができます。 その文字をプログラムにうけわたすには? また、記入欄に初期値をかきこんでおくには? また、記入欄の文字を変更した場合、初期値をそれに変更するには? どうかご教授ください。
78 :
デフォルトの名無しさん :02/09/03 09:28
79 :
デフォルトの名無しさん :02/09/03 15:59
ちょっといい話し。 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− あちこちから悲鳴が聞こえる泣き叫ぶ子供。瓦礫と化した家に押しつぶされる日本人。 「助けて…」という声が絶え間なく聞こえている。しかし被災した神戸の住民は、放心 したように黙って座り込んでいるだけだ。あまりのショックに下敷きになっている人を 助けることさえ忘れているのだ。 「今助けるけん。まっとんしゃい!」 こう叫んだのは共に住民として神戸に住む在日韓国人達だった。自分も血を流し怪我を しているにも関わらず救助活動を続けた。 「ぜったい助けるけん。がんばっとー!」こうして懸命な救助活動の末助け出された人 達は1万人以上にものぼる。助けられた中学生の女の子は「在日韓国人の人がいなかっ たら間違いなく死んでいた」と涙を流した。村山首相を始め救助活動の遅れが多くの助 けられる人たちの命を奪った。「助けるのは当たり前けん! 私ら同じ住民やもん!」 オモニ達は目に涙を浮かべていた。
80 :
デフォルトの名無しさん :02/09/03 18:47
81 :
デフォルトの名無しさん :02/09/03 22:13
戦時中にレイプ事件など女子供を痛めつける事件が起きると、警察が動き 出す前に先立って調べに動いたのは在日韓国人だったと言う。 それも大半がヤクザと言われる人達であって、彼らは確かに日常的には 非難の目で見られているかもしれないが、しかしまた一番勇気のある人達 でもあったのである。
??? いきなりここはニュー速か極東にワープしたのれすか?
83 :
デフォルトの名無しさん :02/09/04 02:27
84 :
デフォルトの名無しさん :02/09/05 11:27
フォームにRefEditコントロールを使うと、動作がおかしくなります。 具体的には、セルの参照後、元のフォームに戻っても、操作を受け 付けなくなります。RefEditが縮小されないようです。 MSのサポート情報(Excel97に似た現象があるらしいです。)やGoogle で検索しても情報がなくて・・・ 環境はWin2000SP3 Excel2002SP2です。ご指導お願いします。
85 :
デフォルトの名無しさん :02/09/07 23:20
低レベルで申し訳ないんですが質問させてください。 ある列を基準に集計したいのですが可能でしょうか? たとえば 商品 金額 商品 金額 A 100 A 300 A 200 ⇒ B 700 B 300 B 400 のように。 よろしくお願いします。
86 :
デフォルトの名無しさん :02/09/07 23:35
87 :
デフォルトの名無しさん :02/09/08 03:59
>>87 ム板的には、あえてVBAプロシージャを組んでみせるとか。駄目?
Range("XX:XX").Select Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(2), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True とかね。それともCellsプロパティを使って配列のように計算するか。
Excelマクロについての質問はこちらで良いのでしょうか? グラフのデータのX軸を変更したいのですが ActiveSeet.ChartObjects("グラフ 1").Activate ActiveChart.SeriesCollection(1).XValues = "シート1!R2C1:R2C1" でエラーが発生したりしなかったりします。 エラー内容は「SeriesクラスのXValuesプロパティを設定できません。」 です。 原因がわかりません。教えて下さい。 よろしくお願いします。
91 :
デフォルトの名無しさん :02/09/10 23:19
>>86 〜
>>89 皆さんありがとうございます。
データ→集計をプロシージャで書くと(手動でも)
行の左にエクスプローラのツリーのようなものが出てしまいますよね。
できれば出したくないんですが、そうなると「おとなしくAccess使え」
って事になるんですよね・・・。
でも参考になりました。ありがとうございます。
92 :
デフォルトの名無しさん :02/09/10 23:53
93 :
デフォルトの名無しさん :02/09/20 00:22
超初歩的な質問ですみません・・。 コマンドボタンを押すと、アクティブになっているセルの 場所(仮にA1)を返してテキストボックスに"A1"を表示するには どうしたらいいでしょうか・・。 値の参照は簡単ですが、場所???壁にぶち当たり・・。 ご存知の方いらっしゃいましたらよろしくお願いします。
>>93 コントロールのボタンを貼り付け、TakeFocusOnClickプロパティをfalseに
設定する。
テキストボックスを一つ貼り付ける。
コードに次のようなものを記入する。(関数名、ワークシート名やテキスト
ボックス名は適宜変更の事)
Private Sub CommandButton1_Click()
Worksheets("Sheet1").TextBox1 = ActiveCell.Address
End Sub
デザインモードを抜け、ボタンを押すと、テキストボックスにアクティブセル
のアドレスが表示されるはずです。
>94 教えていただいてありがとうございました。 おかげさまでサクッと作業が進みました。 本当に助かりましたー!
96 :
デフォルトの名無しさん :02/09/21 10:03
>>58 と似てるけどちょっと困ってます。
VC6.0++&MFC、#importを使って作成したEXEによってシートを削除すると
Excel95が入った環境では確認ダイアログを消せません。
95VBAヘルプのDisplayAlertsの項では「外部から使った場合は効果がありません」
って書いているのですが、どうにかしてこのダイアログを消す方法はないでしょうか?
最悪、シートを削除するだけの関数を保存したExcelファイルを別に用意しておき
実行環境がExcel95だった場合に限りApplication.Runでそれを呼び出して
削除しようかと考えてます。(この方法ではダイアログが出ないことを確認しました)
∧,,∧ よろしくお願いします。 ミ,,゚Д゚彡 VBAで Public Function AAA() as date と関数を作ってDate型で セル値を[=AAA] として値を表示させているのですが こうしたときに、時にはセルを空白にしたい時があります。 でも、AAAをnullでもどしたりすると #Valueだかなんだかの値がセルに出てしまい エラーっぽくなってしまっています。 これをどうにか消すようなことはできないでしょうか。 ヨロシコです。
98 :
デフォルトの名無しさん :02/09/24 00:07
>>97 =iif(AAA=Null,"",AAA)
とか。
∧,,∧ Excelのセル入力じゃなくて ミ,,゚Д゚彡 VBAのFunction上で消したいのです。 むりかしら。
Dateで返そうとするから無理なんじゃ? ところでDelスレ以外での発言はそのコテハン止めてくれない?
>>100 まぁ、そういわんでもいいんじゃない?
叩かれる可能性の高いコテハンで頑張ってる
奴の唯一の(?)特権が、以前に何か教えてもらった
奴がお礼に教えてくれるかもしれないわけだし。
>>ギコ
試したわけじゃないけど、値がNULLだったら、
Nothingに変えてしまうとどうなるかな?
l||l∧,,∧ / ̄ぢつは ̄ ̄ ̄ ̄ ̄ ̄ ̄ .ミ,, 彡 < ツっクを受けてたりしまつ.... ∪ _ミ /  ̄ ̄ ̄/\___________ (ミ,,,|\ ./ L e t s/ '\/.======./  ̄ ̄ ̄
103 :
デフォルトの名無しさん :02/09/25 19:01
適当なスレがなかったので、ここに質問させて頂きます。 印刷タイトルと同じように、 各ページの一番最後の行に金額の小計を出したいのですが、 何かいい方法があったら教えて頂けないでしょうか?
>>103 フッタに設定すれば?(毎ページごとに)
VBのコントロールにあるIndexみたいなのが Excelには 見当たらないんですけど、 複数のコントロールを順番に操作したりできないでしょうか?
>>104 フッターに設定してもいいんですが、
エクセルのフッターには、関数って使えませんよねぇ。。。
アクセスなら使えるんですが・・・。
107 :
デフォルトの名無しさん :02/09/26 19:43
EXCELで「支店名を入力したら該当する支店の電話番号」が出てくる マクロを組んだんだが、うまくいかない。 支店が全部で100あったとして、データシートに100の支店を 記入していたらどうってことないんだけど、 管理上データシートを複数に分けたい。 四国のデータシート、関東のデータシート・・・といった具合に。 データシートを複数設けて、ユーザーが電話番号を入れるだけでそれらの データシートをまたがって検索するようには出来ないのでしょうか? どういう記述が必要なのかがわかりません。 仕様上無理??
>>107 1.隠しシートに全部のデータをコピーしてから処理
2.ブックが別じゃないなら全てのシートオブジェクトからデータを取得
(VBA内で必要なシートだけにしてもいいけど)
3.ブックが別だったら面倒だからやめとけ
>>107 DATAsheet = SheetsALL
OUTsheet = "出力フォーム"
で出来ないのか?
試せる環境がないからわからんが。
これが出来ないというのは普通考えられないんだが、どうなんだろ
110 :
デフォルトの名無しさん :02/09/26 21:48
>>109 エクセルで全シートを参照しての検索マクロは過去にやったことあるけど無理っぽい。
あきらめて一つのデータシートにぶち込むしかないね
>>110 そうなの?
試してないけど、
シート1を検索して無かったら、
シート2を検索って出来ないのかな?
112 :
デフォルトの名無しさん :02/09/26 21:58
お前らVBAするのもいいが、それ以前にExcelそのものの機能を限界まで知り尽くす ことも重要だぞ。無駄なVBAをしないためにも、本当にVBAを生かしきるためにもな。 オフィシャルマニュアルで学習するのがいいだろう。
>>107 For Each 〜 In 〜
Next
を御存知か?
============================
SerchSheetName = "なんでJAVAにはunsignedがないんだ!!"
For Each Sheet In Worksheets
If SerchSheetName = Sheet.Name Then
' 検索対象シートがあった場合文字列をぶちこむ
Sheet.Cells.Item(1, 1) = "重すぎるぞJAVAは!"
End If
Next
============================
で全シートに対して検索なり破壊工作なりできますが。
>>112 限界まで知らなくてもいいから
テキトーにプラグラムして ちゃんと動いて欲しいのが本音(w
>113 >"なんでJAVAにはunsignedがないんだ!!" スレ違いだけど俺もそれで苦しんだ・・・ C言語のライブラリをJavaに移行するとき。
Sheet1.Range("A1").Select With Selection.Interior .ColorIndex = RGB(255,128,192) .Pattern = xlSolid .PatternColorIndex = xlAutomatic End With これと Sheet1.Range("A1").Select With Selection.Interior .ColorIndex = RGB(255,128,255) .Pattern = xlSolid .PatternColorIndex = xlAutomatic End With これが 同じ色に表示されるんだけど、設定が変なんでしょうか?
.ColorIndex じゃなくて .Colorだな。 でも、色は同じみたいだが。
あるディレクトリ内の全CSVファイルを走査し、 45行目の23列目の値を新ファイルの1行目に 45行目の27列目の値を新ファイルの2行目に 45行目の?列目の値を新ファイルの3行目に 45行目の?列目の値を新ファイルの4行目に ・ ・ ・ という作業をして、値を抽出した レポートファイルを作りたいです。 エクセルに頼るのではなく、 シェルとawkでやりたい。 でも、ディレクトリのグロビング等が絡むと perlでやった方がいいのでしょーか。
>>119 RGBの何を勉強しろってんだ。
勉強する内容をココに書け!
そして、そのマクロを実行して、その結果、どうしてそうなるのか
述べてみろ。
>>120 エクセルもVBAも使わないなら、すれ違いでは?
あ、すいません。120です。間違って書き込んでしまいました。 先ほど、某スレから120にレスが付いていたawkのスクリプトを見かけたのですが、 さっぱり判りませんでしたので、excellのVBAではどのようにするのかな、 と思って、質問しようと思って間違ってカキコしてしまったようです。 私は上と似たような情況で、ディレクトリにCSVファイルが沢山あり、 それをxlsファイルの一つのシートに書き込んでいきたいと思っています。 例えば、20行10列のcsvファイルがディレクトリに沢山あって、VBAでグロビング してどんどん開いていき、例えば3行5列の値なんかをシートにどんどん書き出していくには どのようにすればいいでしょうか?
ゲームのフリーセル32000通りを全部制覇するべく挑戦しており、 エクセルでフリーセルの番号の管理をしたいです。 解き終わった番号のセルを自動でチェックし、 新規ゲーム時に、未済の番号からランダムに出せるようにする。 解けない番号はパス(保留)して、また未解決の番号の中に戻す。 達成率をグラフで表せてもいいなと思ってます。 いわば「フリーセル32000本ノック」みたいなものを作りたいのです。 他のアプリが関わる場合でもVBAでマクロを組む事は可能でしょうか。
125 :
デフォルトの名無しさん :02/10/01 17:18
どうでもいいがVBAをマクロというのはやめろ。 意味が違う。
VBAは 真黒という(謎)
複数のセルを選択している状態は、どのようにして知ることが できるのでしょうか?
>>127 言ってる意味がわからないので適当です。
Sub aaa()
Dim i As Long
Range("A1,C5,D7").Select
For i = 1 To Selection.Areas.Count
MsgBox "数" & i & Chr(13) & "アドレス" & Selection.Areas(i).Address
Next i
End Sub
129 :
デフォルトの名無しさん :02/10/09 23:34
Shell "ping **.**.**.** -n 1" とやると、DOSのコンソールに結果が出力されますが、この結果を シート(セル)に読み込みたいのですが、どうしたら良いのでしょうか
>>130 えっ...そうなんですか、てっきり出来るもんだとばかり...
以外な結末にちょっと唖然としてます
132 :
デフォルトの名無しさん :02/10/10 00:53
エクセルのVBAでActiveXを作りたいのですがどうすれば作れるのでしょうか? 教えてください。
>>130 いや、できるって。
とりあえず、糞みたいな方法だと、
Shell "ping **.**.**.** -n 1" > *****
ってやって
テキストにして読み込むなんてすればいいんでないの?
たぶん、他にも方法があると思うけど眠いから寝る。
すこし起きれたのでサンプル (いいかげんですまん) Sub ボタン1_Click() Shell "command.com /c ping **.**.**.** > C:\@aaa.txt" strFileName = "C:\@aaa.txt" Set objFileSystem = CreateObject("Scripting.FileSystemObject") Set objFile = objFileSystem.OpenTextFile(strFileName) Do Until objFile.AtEndOfStream strecBuff = objFile.ReadLine i = i + 1 Cells(i, 1).Value = strecBuff Loop objFile.Close End Sub
>>130 ∩__∩
くまの( ´,_ゝ`)プッさん
>>134 resありがとうございます
私もリダイレクトしてファイルに落とすという方法は思いついたんですが
Shell "ping **.**.**.** > C:\@aaa.txt"
とすると、なぜかリダイレクトされなかったんですよ
"command.com /c"を付ければ良かったんですね..出来ました(^_^;)
137 :
デフォルトの名無しさん :02/10/10 10:30
シートにはりつけた コンポボックスにフォーカスを移したいんですが、どのようにすればいいのでしょうか?
138 :
笑ってください :02/10/10 16:25
VBAで1行目から10行目を選択するのは Rows("1:10").Select ですが 1行めをX(変数)にしたい時はどうなるのか教えてください。 区切り方が分かりません。 どなたかお願いします。
139 :
デフォルトの名無しさん :02/10/10 16:30
Rows(x & ":10").Select
140 :
笑ってください :02/10/10 16:49
>>139 動きました。
本当にありがとうございますm(__)m
コマンドボタンの Caption なんですが、2行以上に分けて表示することは 可能でしょうか?
ハァ。 CommandButton1.Caption = "1行目" & vbCrLf & "2行目"
>>142 プロパティからは出来ないって事でしょうか?
>CommandButton1.Caption = "1行目" & vbCrLf & "2行目" で、変更したCaptionを見ると"1行目・・2行目"と表示されます それで、試しに一度消して、"1行目・・2行目"と入れると... 駄目でした(*_*) やっぱりVBAからでないと出来ないみたいですね
145 :
デフォルトの名無しさん :02/10/11 16:40
シートに貼り付けたコマンドボタンの位置が、どんなに スクロールさせても 常に 表示させてる状態にするには どのようにしたらいいのでしょうか?
146 :
デフォルトの名無しさん :02/10/11 17:07
シートをスクロールさせた時に 発生するイベントってありますか?
147 :
デフォルトの名無しさん :02/10/11 17:43
Workbook_BeforeCloseのイベントで ThisWorkbook.Saved = True って やってるんだけど、保存しますか? ときいてきます。 右上の×で クローズさせる時に、 ThisWorkbook.Saved = True ってのは できないんでしょうか?
>>147 ブックが他に開いていた
ってオチじゃないの?
(´・ω・`)ショボーン
150 :
デフォルトの名無しさん :02/10/15 22:07
シートにテキストボックスやオプションボタンを貼り付けたのですが、 Tabキーを押しても次のテキストボックス等に移動してくれません。 対処方法を教えて? もうひとつ。 CommandButton1.Value = "" ・ ・ CommandButton10.Value = "" を変数iとFor文で記述することはできないのでしょうか?
151 :
デフォルトの名無しさん :02/10/15 22:09
おまいら、結構やさしーんだな.........
152 :
デフォルトの名無しさん :02/10/15 22:24
バグってるVBA使うよりVBからアタッチした方が 話早くない?
153 :
デフォルトの名無しさん :02/10/16 00:33
154 :
デフォルトの名無しさん :02/10/16 07:33
ESCキーによる処理の中断を無効化したいです。
BrowseForFolder関数でもAPIのSHBrowseForFolder関数でもいいのですが、
フォルダを参照するダイアログを出すマクロの話です。
フォルダの参照ダイアログが出ている間にESCキーを押すと
処理が中断してデバッグ画面(VBAエディタ)になってしまいます。
On Errorでは引っかかってくれないので、ダイアログを出す直前で
「Application.EnableCancelKey = xlDisabled」をしています。
しかしダイアログを出す前後は処理が中断しないのですが、
その後の処理(違うサブルーチン)で処理の中断になってしまうのです。
ttp://www.projecta.co.jp/mybooks/book05-3.htm 上のページの一番下から2番目が答えっぽいけど・・・
155 :
デフォルトの名無しさん :02/10/16 11:19
ShellでPINGを打つという件ですが、クライアントが10〜20台位有る等から PINGのBATを生成して、それをshellで起動する事にしました この場合、batが終了するまで5〜10秒位掛かります しかし、shellでbatを起動すると、batが終わる前に次の命令が実行されてしまいます 次の命令は、batで生成されたはずのファイルを読み込む命令なので、batが終わるまで 待つ必要があります 今のところ(プロトタイプでは)20秒のweitを入れてうまく動いているんですが 今後、実用段階になった場合、いろいろな環境で使われる可能性があり、20秒では 十分でない可能性があります そこで、質問なんですが、 shellで起動したプログラムが終了したかどうかをチェックする方法は無いでしょうか?
157 :
デフォルトの名無しさん :02/10/21 15:10
>>156 そんなこと Excel VBAでは できません(w
>>156 Win32APIを使わなくても可能
CreateObject("WScript.Shell").Run "c:\path\hoge.bat", , True
>>158 ありがとうございました、出来ました
ひとつ気になった事があるんですが、
Private Declare Function OpenProcess Lib "kernel32"......
は、たぶん"kernel32"というライブラリーを読み込んでいるんじゃないかと思われるんですが
たまたま私の環境(win-nt/excel2000)ではそのまま実行できたんですが、excel97等でも
実行できるんでしょうか?
できる。
>>159 158さんの方法を試している間に書き込んでいただいたようで、ありがとうございます
これでも出来ました、簡単でいいですね(^_^)
"WScript.Shell"って実行環境について制限は有りますか?
>>161 ありがとうございました
> "WScript.Shell"って実行環境について制限は有りますか? ・Excelのバージョンが2000以降 ・OSがWin98/2000以降 ・IEのバージョンが5.0以降 ・WSHを自分でインストールした環境 上の条件のうち、いずれか1つでも満たしている環境なら動くはず。 でも、環境を気にせず確実に動かしたいならAPIの方がおすすめ。
>>163 >・IEのバージョンが5.0以降
これでクリア出来そうです、私の知る限り IE5.01 以上が入っているはずなんで
ありがとうございました
165 :
デフォルトの名無しさん :02/10/22 20:32
エクセルでセルに半角文字が入力されたらまずいので それをチェックする関数を作成したいのですが、 方法が思いつきません。 Asc()を駆使すればいけるような想像もしているのですが、 非常に効率が悪く思えます。 いい方法あれば教えていただけませんか? よろしくお願いします。
>165 半角 VBA 判断 ググレ
>164 なるほど、StrConvで変換してみて 戻り値で元の文字列と比較してみて 変換されてたら半角文字列だったってことですね。 なるほど。 目的が変換じゃなくて「チェック」だったので 気付きませんでした。 ありがとうございました。
いや、俺もためになった。。。
フツーに出してるのXMLもどきじゃなかったっけ?
いいんだよ、どうせ素人向けなんだから。
VBAは 真黒という(謎)
173 :
デフォルトの名無しさん :02/10/31 00:15
VBAからdll呼び出せるでしょうか。 できるなら方法を教えてください。
>>173 WinAPIのLoadLibrary
(やったことないからしらんけど)
176 :
デフォルトの名無しさん :02/10/31 11:53
>>173 VBAのヘルプでDeclareステートメントを調べてみる
VB Declare でぐぐる
177 :
デフォルトの名無しさん :02/10/31 19:31
inputboxで入力した文字列を記録してファイルに出力するにはどうすれば? できればそのScriptと同じ場所に出力したい。
>>177 ファイルを出力するなら
OPEN
WRITE #
PRINT #
CLOSE
この辺りだが、Scriptと同じ場所というのが理解出来ない。
Excelファイルの場所なら CurDir で取れるけど。
おまいら、結構やさしーんだな.........
180 :
デフォルトの名無しさん :02/11/05 19:08
∩ | | | | ∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ;´Д`)// < 先生!素人以下の知識しかないプロが居まつ! / / \___________________ / /| / __| | .| | \  ̄ ̄ ̄ ̄ ̄ ̄ ̄\ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ || || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| .|| ||
181 :
デフォルトの名無しさん :02/11/05 20:30
VBAって2002でもまだ生きてんの? VBAは.NETはないのか?
∩ | | | | ∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ;´Д`)// < 先生!俺はC++のプロなんでVBAは素人なんです。 / / \_____________________ / /| / __| | .| | \  ̄ ̄ ̄ ̄ ̄ ̄ ̄\ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ || || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| .|| ||
>>181 M$が作る限りVBAは無くならないと思われ。
>1 VBAはでかいのを作ると動きが不安定になることかなー。 出力のみEXCELと割り切って入力とロジック(?)は別ので組んだほうがいいぞ。
教えてください。 setfocus.textbox1と命令しているのに、フォーカスされません。 どうしてでしょうか? ’------------------------------- Private Sub TextBox1_Change() MsgBox (TextBox1) TextBox1.SetFocus End Sub ’------------------ 文字がテキストボックスに入力されるたびに、Msgboxでそれを 表示し、またテキストボックスに入力していくというようにしたいのですが これだと、フォーカスされないので、次の文字がにゅうりょくできないのです。 ちなみに、プロパティーは初期のままです。
>>185 MsgBox が表示されている間は、そのコードはMsgBox (TextBox1)の所で
止まっています。SetFocusまで実行されていません。
意図のことをしたい場合、MsgBoxでは無く、新しく別にフォームを作って
そのフォームをモードレスで表示する必要があります
Private Sub TextBox1_Change()
If UserForm2.Visible = False Then
UserForm2.Show vbModeless
End If
UserForm2.Label1 = TextBox1
End Sub
こんな感じ。
この場合、全てのフォームがモーダレスになっている必要がありますが。
#フォームのプロパティがShowModal=Flase
まぁ、あんまり良い設計じゃ無いですね。他の方法を考えた方が良いでしょう。
187 :
デフォルトの名無しさん :02/11/07 20:12
イベントを追加することって出来ますか? たとえばワークシートオブジェクトにはMouseMoveイベントがないので、 MouseMoveイベントを追加するとか。
VBAはVSAになります。将来はC#でも使えるようになるらしいよ。
>>186 ありがとうございます。おかげで思い通りの処理を
させることができました。
191 :
デフォルトの名無しさん :02/11/08 21:14
VSAって情報少なくてよくわかんないんだけど、なんなんだろう? .NETの時もそうだったんだが、MSの新しい戦略の発表って いつも抽象的でよく理解できないんだよな。 最近は実例もいっぱい出てきたので、.NETが何を言いたいかやっと わかってきた所なんだが・・・ 俺が頭堅いからか? でも、VBA=VSAというのは違うと思う・・・
192 :
VBAは好きだがVBは使わなくなった :02/11/09 02:12
すみません。単純な質問なのですが、メモ帳などテキストエディタで、 aaa[LF] bbb などと2行書いてコピー、ExcelのA1セルをSelectして貼り付けすると、 A1とA2のセル(2行)にそれぞれ、aaaとbbbが入ります。 それをVBAのCodeでやろうとして、 dim S as String S = "aaa" & chr(10) & "bbb" とここまで書いて、ハタと困ってしまいました。 cells(1,1).Value = Sとすると、A1セルのみに書き込まれ、A2セルには何も 入りません。(Altキーを押して、1セル内強制改行状態) クリップボードに、Sの内容を送ろうにも、直接文字列をクリップボードに 送るステートメントがわかりません。 メモ帳からのコピー&ペーストのように、VBAのコードだけで、 chr(10)で区切られた文字列を、貼り付け出来ないでしょうか? (LFのコードを、いちいちサーチしていく外、無いでしょうか?)
>>192 LFはセル内の改行コードだから当然そうなる。コードの詳細がわからないけど、
cells(1,1).Value = "aaa"
cells(2,1).Value = "bbb"
となるようにコーディングできない? でなきゃ、
S = "aaa" & vbCr & vbLF & "bbb"
でやってみたら?(試してないけど)
>>192 Dim x() As String
Dim S As String
S = "aaa" & vbCrLf & "bbb"
x = Split(S, vbCrLf)
Cells(1).Resize(UBound(x)+1).Value = WorksheetFunction.Transpose(x)
あくまでクリップボードにこだわるなら
Dim xx As New MSForms.DataObject
xx.SetText S
xx.PutInClipboard
Set xx = Nothing
With Sheets("Sheet1")
.Paste .Cells(1)
End With
最後のWith〜End Withのところは Cells(1).PasteSpecial でもよかったな。
196 :
VBAは好きだがVBは使わなくなった :02/11/10 21:25
>>193 駄目です。vb接頭辞の奴を使っても1セル内に全文字が行っちゃいます。
>>194 あっ!配列とは!!すばらしい。
ループで、1文字ずつ文字列の中からサーチなんて面倒なことを考えてました。
しかし、後半の奴は、ユーザ定義型が定義されていないって怒られました。
SetTextとかPutInClipboardなんてのも見慣れませんが…。
Delphiでいうところの、「Clipboard.AsText := 'aaa' + #10 + 'bbb'」
なんてのがVBAには無いようなので、Clipboard経由にしたい時に困っています。
とりあえず、前半のコードで2セルに書き込めましたので、これを利用させて
頂きます。m(_ _)m
>>196 > しかし、後半の奴は、ユーザ定義型が定義されていないって怒られました。
MSFormsを使う時は、「ツール」-「参照設定」の一覧で
Microsoft Forms 2.0 Object Library にチェックを入れないと。
または「挿入」-「ユーザーフォーム」で一旦フォームを
追加してからすぐ削除してもOK (自動的にチェックが入る)。
198 :
VBAは好きだがVBは使わなくなった :02/11/11 00:09
>>197 出来ました!
DesktopのPCをExcel2002にしてから、Formは一度も使っていなかったらしいです。
NotePCの方で作業する事が多いので…
ありがとうございました!!!
199 :
デフォルトの名無しさん :02/11/12 00:58
ちょっと教えていただきたいのですが VBAで円形(oval)のShapeだけを抽出する事ってできるのでしょうか? ovalだけデリートって作業をしたいのですが SelectAllやるとどうしても、グラフまで選択してしまうんで・・・ どなたか良い方法を教えていただけないでしょうか?
>>199 Dim x As Shape
For Each x In Sheets("Sheet1").Shapes
If x.AutoShapeType = msoShapeOval Then
x.Delete ' 削除
End If
Next
201 :
デフォルトの名無しさん :02/11/14 19:05
一つ教えてけろっぴ。 ワークシート上で、例えば列Eのセルに書き込んでエンターキーを押せば、 必ず一つ下の行でC列のセルに移行するというプログラムを組んでるが わからんち。。。 教えてけろ
202 :
デフォルトの名無しさん :02/11/20 05:24
Excel VBAで英語の発音練習に使うソフトを作るつもりです。 マイク入力をwavで保存し、更に波形まで表示したいのですが、 どうすれば良いでしょうか。 Windows APIを使うらしいのですが、いまいち分かりません。
>>202 (´-`).。oO(どうすればいいんだろう?)
ご存知でしたら、ぜひ教えてくださいー。 お願いします。
(´-`).。oO(Windows APIって何だろう?)
僕はExcel VBAで、ホームビデオに映っている人の名前を自動的に判断して、 ビデオラベルを印刷したいのですが、 Excel とビデオデッキのつなぎかたが分かりません。 キャプターでパタン認識するらしいのですが、 キャプターというのを買えば、ビデオとつなげますか?
こーゆう奴が例えばWindows APIらしいです。 Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _ (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Sub testsound() sndPlaySound "C:\test.wav", 0 End Sub
208 :
デフォルトの名無しさん :02/11/20 22:32
>199 ActiveSheet.oval.Deleteで出来たと思う
210 :
デフォルトの名無しさん :02/11/21 23:52
すみません、こちらでも質問させてください。 ユーザーフォームのテキストボックス内で、 半角と全角のスペースを削除したいのですが、 コードがわかりません。 お願いします。
>210 こちらでも? マルチって意味? それなら嫌われるからやめといた方がいいよ。 また、誤解を招く書き方も駄目。 端っこのスペースを省くなら Trim じゃない?
>>211 ご丁寧にありがとうございます。
気をつけます。
氏名の入力で姓と名の間にスペースを入れないで処理したいと思っているのですが
が、入力時にスペースをいれて入力されてしまった場合に、
そのスペースを削除できれば、と思っています。
>212 VB使いじゃないからうまく説明できないけど、 InStrを使ってスペースの場所を検索して str=Mid( ?????????(InStr(str,??? ) ) こんなイメージでいけると思う。 引数とかは思い出せない。。 まぁとにかく流れとしては、 InStrでスペースの場所を探す(無ければお終い) 渡す文字列(フルネーム??)は先にTrimかけておくといいと思う。 それで見つかったらMidを使ってスペースより前(苗字?) を取り出す。 その後またMidを使ってスペースより後(名前?)を取り出して 先ほど取り出した苗字と結合する。 FullName=Myoji & Namae 見たいな感じになるのかな。 さぁ、間違ってたら他の人頼む。
s = textbox1 L = Len(s) t = "" For i = 1 To L c = Mid(s,i,1) If c <> " " And c <> " " Then t = t & c Next textbox1 = t
>>213-214 解決しました。ありがとうございます。
レスが遅くなってすみません。
>>213 InStrですと、スペースの検索ができませんでした。
エラーになってしまって。
ご丁寧にありがとうございます。
>>214 ありがとうございます。
教えていただいたコードを少しいじらせていただいたらできました。
本当にありがとうございました。
216 :
デフォルトの名無しさん :02/11/29 20:07
VBAでマクロを用いて大量のグラフを作る羽目になったのですが。 グラフの出力をオブジェクトにしようか、グラフシートにしようか 悩んでいます。自分としてはグラフシートに出力したいのですが。 数十枚の枚数が要りそうで足りるかどうか心配なのですが 一つのファイルに作れるグラフシートの最大数。ご存知の方おられませんか?
EXCEL2000での話です。すみません。
思うんですけど、この手の質問って、実際にやってみれば分かるんじゃないですか?
>>216 適当なデータをグラフシートに出力するマクロを作って、for-nextで回してみました。
あまりループの回数を大きくすると応答なしになってしまうので、100刻みで取り敢えず
1000個まで作れる事を確認しました。
この場合のワークシートの大きさは3×3の要素の棒グラフで3Mバイトと大したことは
ありません。
これはあくまでも予想ですが、65535個ぐらいまでは作れそうな気がします。そこまで
行ったら非実用的ですが。
>219 出力先を別のブックにするようにすれば無限に作っていけるんじゃない?
シート内の全てのトグルボタンやチェックボックスを 計算中は非表示にしたいんですが 効率のいい方法はなにかありますか?
お蔭様で上手くいきました。どうも有り難うございます。m(__)m
>>221 トグルボタンとチェックボックスだけという区別方法は分からないけど、
次のプログラムはコントロールを計算中消してくれる。
Dim x As Shape
For Each x In Sheets("Sheet1").Shapes
If x.Type = msoOLEControlObject Then
x.Visible = False
End If
Next
Calculate
'計算処理を行う
For Each x In Sheets("Sheet1").Shapes
If x.Type = msoOLEControlObject Then
x.Visible = True
End If
Next
>>223 ありゃ、俺、msoOLEControlObject チェックしてなかったような気がする。
問題無かったし・・・つか、フォームコントロールがはじかれるな。これ。
ま、本質じゃないし、msoFormControl とかも対象に入れればOKだ。
>>224 フォームコントロールも使うなら種類がチェックできますね。ActiveXコントロールの
種類を区別できる方法があったら知りたいです。
Dim x As Shape
For Each x In Sheets("Sheet1").Shapes
If x.Type = msoOLEControlObject Then
x.Visible = False
ElseIf x.Type = msoFormControl And (x.FormControlType = xlCheckBox Or x.FormControlType = xlOptionButton) Then
x.Visible = False
End If
Next
Calculate
'計算処理
For Each x In Sheets("Sheet1").Shapes
If x.Type = msoOLEControlObject Then
x.Visible = True
ElseIf x.Type = msoFormControl And (x.FormControlType = xlCheckBox Or x.FormControlType = xlOptionButton) Then
x.Visible = True
End If
Next
質問です。 セルに記入された日付を参照して曜日をだしたいのですが、 (A1に年、A2に月、A3に日を入力してその値を参照) Weekday(Range("A1") / Range("A2") / Range("A3")) とやってみても、 変数に読み込んでみてもうまくいきません。 何かいい方法はありませんか?
>>226 Weekday(Format(Range("A1")) + "/" + Format(Range("A2")) + "/" + Format(Range("A3")))
さらに曜日を表示するには Format(Weekday(Format(Range("A1")) + "/" + Format(Range("A2")) + "/" + Format(Range("A3"))), "dddd") まあこれはいらないと思うけど一応書いておくね。
>>227-228 ありがとうございます、助かりました。
いつか質問に答える側を目指して精進いたします。
230 :
デフォルトの名無しさん :02/12/04 05:56
コマンドプロンプト上で、 >hoge.exe とやるとうまく動くのですが、 Excelにコマンドボタンを配置し、以下のマクロを登録、実行すると コマンドプロンプトの時と違う挙動を示します。 Sub Run() CreateObject("WScript.Shell").Run ActiveWorkbook.Path & "hoge.exe", , True End Sub 何が原因と考えられるでしょうか。
>>230 挙動が異なるとは具体的にどういう事を指すのかわかりかねますが、Runメソッドに
与えるコマンド文字列のパス中にスペースが入るとエラーになるようです。
CreateObject("WScript.Shell").Run Chr(34) + ActiveWorkbook.Path + "\hoge.exe" + Chr(34), , True
のようにしたら動きませんか。
>231 レスありがとうございます。 挙動不審の原因が分かり、自力で解決できました。 原因は hoge.exe 中でファイル tako をオープンしていたのですが、 エクセルから実行させるときは、hoge.exe 中で tako のパスを指定しなければならないというものした。 同じフォルダにあれば、パスはいらないと思っていたのですけどね。
>>232 そうでしたか。それはよかったです。
カレントディレクトリの意味がわかれば解決できますね。
234 :
デフォルトの名無しさん :02/12/05 11:45
Excel2000からセーブ時にWebページとして保存できますが、 このときchartオブジェクトはgifファイルに変換されますよね。 この機能だけ単独で使いたいのですが何かよい方法はないでしょうか? 今はSaveAsメソッドにxlHtmlをオプションで渡し、 できあがったファイル群からgifファイルを抜き出すと言う手法を用いているのですが いまいちスマートではないので、他に方法があったらおしえてください。
excel chart export
>>235 アドバイスありがとうございました。
chartオブジェクトにexportなんてメソッドがあるの知らなかった。
97からか?
今まで95ばかりだったので知らなかった。
237 :
デフォルトの名無しさん :02/12/10 21:43
初歩的な質問ですみませんが ActiveSheet.UsedRange.Address で帰ってきた選択範囲 $G$10:$BA$571などを をcells形式で所得したいのですが どうすればいいでしょうか
238 :
デフォルトの名無しさん :02/12/10 22:00
>>237 所得すると税金がかかるぜよ。
ところでCells形式にして何に使うの?
目的がわからん。
ActiveSheet.UsedRange自体がRangeオブジェクトだから、そのまま
使えばいいんじゃないのか?
VBAでオーナードローしてる人いる?
>$G$10:$BA$571などををcells形式で所得したいのですが データ範囲の上端、下端、右端、左端の位置が欲しかったのです。 しかたないので入門書と格闘しながら Function kiridasi(x As String) As Integer Dim a As Integer, b As Integer, c As String, x As String '$D$5:$H$9のような範囲が与えられた時 初めの$Dを抜き出し4にする。 a = 2 '最初の$から b = InStr(a, x, "$", 1) '次の$まで c = Mid(x, a, b - a) '抜き出し。 x = Mid(x, b) '元の文字列から抜いた分を取り除く。Xは$5:$H$9になる If IsNumeric(c) = "False" Then '文字なら数字に直して返し If b - a = 1 Then kiridasi = Asc(c) - 64 Else: kiridasi = Asc(Mid(c, 2) - 64) + Asc(Mid(c, 1, 1) - 64) * 24 End If Else: kiridasi = Val(c) '数字ならそのままの値を返す End If End Function というサブルーチンを作っていざ実行しようとすると ByRef 引数の型が一致しません とでるので困っています。 x = Mid(x, b) の行のところが明らかにおかしくなるのですが、 一体どのような問題なのでしょうか?どなたか御指摘頂けませんか? 変数のスコープの問題のように思ったのですが良く分かりません。
>240 ByValにしたら
ByValにしたら始めの一回目は上手くいきますが 結局元の文字列変わらないので何回やっても最初のDしか変換できません,,,困った
'左上のセルを返す Private Function LeftTopR(ByVal r As Range) As Range Set LeftTopR = _ r.Parent.Cells(r.Row, r.Column) End Function '右下のセルを返す Private Function RightBottomR(ByVal r As Range) As Range Set RightBottomR = _ r.Parent.Cells(r.Row + r.Rows.Count - 1, r.Column + r.Columns.Count - 1) End Function
With ActiveSheet.UsedRange Debug.Print .Item(1).Address Debug.Print .Item(1, .Columns.Count).Address Debug.Print .Item(.Rows.Count, 1).Address Debug.Print .Item(.Count).Address End With でいいじゃん。
245 :
デフォルトの名無しさん :02/12/11 20:41
>>240 >データ範囲の上端、下端、右端、左端の位置が欲しかったのです。
その位置を何に使うのか書いてみれ。
大体余計な取得をするやつはヘタクソと相場が決まっているのだが。
繰り返すがActiveSheet.UsedRangeはRangeオブジェクトだよ。
そのまま使えばいいんじゃないのか?
>>240 もしかして行番号や列番号を使ってCells形式でループを回すのか?
For Each Nextを使えばそんなもの必要ないから違うだろうな。
廃れてるな。
シートに新しい入力をする時それまでの入力と被らないように データの入力の限界を求めようとしたんですが... ようやく解決しました。お手数かけてすみません。 まだVBA始めてたったの数週間の素人なもので
EXCEL2002(Win)で正規表現の置換がしたいんだけど、具体的にどうするの? 例えば A = "ab" & vbCrLf & "xy" B = s/$/z/g で B に "abz" & vbCrLf & "xyz" が入るようにしたい。
性器表現
正規表現はVBSのRegExpオブジェクトを使えばできるけど、 この程度ならReplace関数でもできるだろ。 A = "ab" & vbCrLf & "xy" B = "z" MsgBox Replace(A, vbCrLf, B & vbCrLf) & B
>>251 ありがと。RegExpってのがキーワードね。
253 :
デフォルトの名無しさん :02/12/12 21:06
教えてください。 エクセル2000でテキスト開いて テキスト形式で保存する時 "があるとその前後に勝手に"がついてきて 困ってます。 どうするとなくなりますか?
すみませんがオプションボタンに同じ名前をつけてコントロール配列を使おうとすると Nameプロパティを設定できません。名前を特定できません。と出て、 リネームできないんですがコントロール配列はVBだけでExcelVBAでは使えないんですか?
どうも有り難うございました。m(_ _)m
257 :
デフォルトの名無しさん :02/12/14 12:19
エクセル2000のVBAで他のアプリ(メモ帳など)から切り取ったテキスト文を inputboxのdefaultに使いたいのですが、 その方法が良く分かりません。Clipboard.GetTextを使うような気がしますが 具体的にはどうすれば良いのでしょうか?
色々試してみても上手くいかず、埒があかないため 他の方にお伺いすることにします。失礼しました。
>258 Dim MyData as DataObject Private Sub CommandButton1_Click() Dim s As String TextBox1.SelStart = 0 TextBox1.SelLength = TextBox1.TextLength TextBox1.Copy MyData.GetFromClipboard s = InputBox("", "", MyData.GetText(1)) End Sub
>>257 >>258 例えばテキストボックスに貼り付けるだけなら
TextBox1.Value = ""
TextBox1.Paste
ではいかんの?
こんな風にしてもいいが面倒くさい。 Dim dat As DataObject Set dat = New DataObject dat.GetFromClipboard TextBox1.Text = dat.GetText(1)
263 :
デフォルトの名無しさん :02/12/17 13:07
エクセルのVBAで10秒たつと処理が始まるようにしたいんですが・・・ なにかおすすめの方法はありませんか
264 :
デフォルトの名無しさん :02/12/17 13:13
>263 「10秒経ったらこのボタンをおしてください」 というボタンを置く
267 :
デフォルトの名無しさん :02/12/17 20:45
お願いします、助けてください。検索してもぜんぜん見つからない・・・・・ RND関数では、負の乱数を発生させることができません。標準分布抽出方の乱数をEXCEL上で使わねばならず、VBAでやることできず困っています。 詳しい方おながいします!
-つけりゃいいじゃん
269 :
デフォルトの名無しさん :02/12/17 20:54
>>268 ああー、早速のレスありがとう。ち、ち、違うんですー!
正戸負両方の乱数が欲しいんですー。
マイナスつけたら負の乱数だけになるー。
(ToT)
>>269 -5から5を発生させたかったら、0〜10の数をRNDで作って5を引く。
難しかったかな?
0.5引く。そっから2倍して使うもよし。
272 :
デフォルトの名無しさん :02/12/17 21:02
>>270 >>271 RNDって、(擬似)正規標準分布で0.5が平均なんですね?
知らなかった。ありがとうございます。
273 :
デフォルトの名無しさん :02/12/17 21:07
>>270 >>271 おお、イイ!ホント、イイかんです。今チェックしたら、ちゃんとイイ感じでした。お二方さん、ありがとう!
「ち、ち、違うんですー!」 ってなんか萌える。
275 :
デフォルトの名無しさん :02/12/17 21:25
>>274 それって、挿入するときのこと想像しているでしょう?
275はかなりエロい。
>263 timeかtimer関数でも出来る(日付をまたぐとどうなるか知らん) >273 272のツッコミを無視して大丈夫? 解ってスルーしてるなら良いけど
誰か272にいちようツッコミを入れてあげてください
Excel VBAで作ったものを売り出すんだけど、 いくらまでなら許せる?
>279 それ使うといくら儲かる?
0円
282 :
デフォルトの名無しさん :02/12/17 23:43
マクロを先週覚えた初心者ですが、このスレは初心者OK?
Excelには Application.WaitやApplication.OnTime というものがあるのだが。
それと俺には
>>277 の
> 272のツッコミを無視して大丈夫?
> 解ってスルーしてるなら良いけど
この意味がサッパリわからん。
>>282 OKですが、何か?
284 :
デフォルトの名無しさん :02/12/18 00:02
先ほどは親切にありがとうございました!!!!! たびたびすみません! ExcelのVBAからC++でビルドされたバイナリ呼び出す手法を急に勉強しないといけなくなりました!!!!! 推薦図書おながいします!!!!!
バイナリって何形式よ? DLLならヘルプでDeclareステートメント見ろ。
286 :
デフォルトの名無しさん :02/12/18 00:09
DLLです!わかりました、ありがとうございました!早速調べてみます! VBA暦12時間・・・・・とほほ・・・・・
287 :
デフォルトの名無しさん :02/12/18 00:10
書籍は俺はわからんからパス。 VB(.NETでなく旧VB)は持ってないの? VBからDLLを呼び出すのと方法はまったく同じなので、 VBの方で調べてみた方が情報がたくさんあると思う。
初心者OKみたいなのでお言葉に甘えて。 入力というsheetとリストというシートを作りました。 リストのK1セルに「=COUNT(A:A)+1」という数式を入れときます。 入力シートのB1セルに書いた文字をリストのB2に 入力シートのB2セルに書いた文字をリストのC2に 入力シートのB3セルに書いた文字をリストのD2にそれぞれ貼って行きたい。 リストのA2には「2」が入るようにしたいのです。 そしてその次からは続くように 入力シートのB1セルに書いた文字をリストのB3に 入力シートのB2セルに書いた文字をリストのC3に 入力シートのB3セルに書いた文字をリストのD3にそれぞれ貼って行きたい。 リストのA2には「3」が入るようにしたいのです。 ちなみに書いたのは Sub データ貼付() ' ' 入力シートからリストシートへデータ貼り付け 行番号 = Sheets("リスト").Range(K1) Sheets("リスト").Range(K1) = Sheets("リスト").Cells(行番号, 1).Value Sheets("入力").Range(b1).Value = Sheets("リスト").Cells(行番号, 2).Value Sheets("入力").Range(b2).Value = Sheets("リスト").Cells(行番号, 3).Value Sheets("入力").Range(b3).Value = Sheets("リスト").Cells(行番号, 4).Value Sheets("入力").Range(b4).Value = Sheets("リスト").Cells(行番号, 5).Value Sheets("入力").Range(b5).Value = Sheets("リスト").Cells(行番号, 6).Value
>283 RND()は正規分布じゃなくて一様分布なのだが、そのまま使ったりしてないだろうなぁということ 267を見る限り不安だ(w
291 :
デフォルトの名無しさん :02/12/18 00:47
>>290 やっぱり・・・・・
しばらく使ってみてて、これってどうやら擬似標準正規分布じゃないな、と思いました。
だって、オプションの数値解がおかしかったんだもん。でも、デルタヘッジの有用性を
調べたいだけなので、現時点では問題ないと思う。とにかく、いろいろと親切にありが
とう。ここのスレの人たちイイ人。
>>289 入力シートは常に同じ場所に入力して、リストの方だけが増えていくということね?
説明の方はセルが3つでコードの方は5つあるけど、セルの数は決まってないの?
1回ずつコマンドボタンか何かで転記するの?
>>292 >入力シートは常に同じ場所に入力して、リストの方だけが増えていくということね?
全くその通りです
>説明の方はセルが3つでコードの方は5つあるけど、セルの数は決まってないの?
レスとして書くのは3つくらいがいいかと思って省略しちゃいました・・・
>1回ずつコマンドボタンか何かで転記するの?
はい。ボタンにマクロを登録します。入力したものはクリアーもする予定です。
>>282 の自分のレスで訂正
○ リストのA2には「3」が入るようにしたいのです。
× リストのA3には「3」が入るようにしたいのです。
> レスとして書くのは3つくらいがいいかと思って省略しちゃいました・・・ だから結局ここのところはどうなのよ? 仕様がわからんから 5個固定にしたよ。 あと、K1セルを作らなくても最終行を取得して追加すればいいと思うので、 勝手にそうした。 Dim wsList As Worksheet Dim 行番号 As Long Dim 入力数 As Long 入力数 = 5 Set wsList = Worksheets("リスト") With wsList.Cells(wsList.Rows.Count, 1).End(xlUp) 行番号 = .Row + 1 + IsEmpty(.Value) End With With wsList.Cells(行番号, 1) .Value = 行番号 .Offset(, 1).Resize(, 入力数).Value = _ WorksheetFunction.Transpose(Sheets("入力").Range("B1").Resize(入力数)) End With
>>295 ありがとうございます。5個で良いのです。
自分のはどこが違ってたか、
>>295 の内容は分からないですが、ひとまず動きました。
もっとよく勉強して出直してきます。
遅い時間まで本当にありがとうでした。
> 自分のはどこが違ってたか、 代入の左辺と右辺が逆だし、k1とかb1とかはダブルクォーテーション記号 で括って文字列にする必要がある。 295のコードは リストシートの1行目が空欄の場合も2行目から始めてよければ、 もうちょっとシンプルにできる。 Sub データ貼付() Const 入力数 = 5 With Sheets("リスト").Range("A65536").End(xlUp).Offset(1) .Value = .Row .Offset(,1).Resize(,入力数).Value = _ WorksheetFunction.Transpose(Sheets("入力").Range("B1").Resize(入力数)) End With End Sub
説明書を絶対読まない自分。
本の一部見て、わかりもしないくせに自分なりにアレンジしたのがダメでした。
初めて2chをありがたいと思ったよ。thanks
>>295
300ゲッと。
301 :
デフォルトの名無しさん :02/12/18 10:15
dd
302 :
デフォルトの名無しさん :02/12/18 16:15
>>298 自分で背景理論的正当性がわかんないけど、やってみます。
303 :
デフォルトの名無しさん :02/12/18 17:03
ここのスレの住人の人で、C++のCOMのDLL呼び出している人いますか? ご提案どおりHELP見たり検索したりしたんですけど、具体的な手法がわからないままなんです。
COMにC++とか関係あるの?
>>304 だとしたら全然Common Object Modelじゃないな。
306 :
デフォルトの名無しさん :02/12/18 17:37
おまえら、VBAでlogexを計算するプログラムを教えて下さい。
>>303 お前もう、いいかげんしつこいし、全然わかってないよ。
COMのDLLを呼び出すもなにも、
VBAでオブジェクトを扱う=COMのEXEまたはDLLの呼び出し
なんだよ。
最初に参照設定をしとけば、あとはお前がVBA側で
それを意識する必要はない。
MsgBox Application.Path
これもCOMのオブジェクトの呼び出しなんだよ。
お前そんなこともわからないで本当にC++で
COMコンポーネントを作れるのか?
308 :
デフォルトの名無しさん :02/12/18 21:35
>>307 ごめんなさい。ぼく低学歴で知能指数も低いんです。Rogersonの参考書の範囲で
しか知らないんです。ずっと検索したりヘルプから探してるんだけど、なぜかきっか
けすらつかめません。あなたはきっとぼくよりも高学歴で高給でスキルも持ってら
っしゃると思います。お情けと思って、参考書をご存知なら教えてくださいませんか?
釣りに付き合うのも飽きたな。もうそろそろ「釣れた」って言って良いよ。
310 :
デフォルトの名無しさん :02/12/18 23:53
>>309 これはネタではありませんよ。ホントです。おながいします。
311 :
デフォルトの名無しさん :02/12/19 00:13
「低学歴で知能指数も低い」のなら、参考書なんか読んでも分りませんよ。
312 :
デフォルトの名無しさん :02/12/19 00:41
>>311 そうおっしゃらずに、バカを助けると思って・・・・・
ご存知の方、おながいします。
しつこいな。これが最後だ。 VBAの入門書をどれでもいいから買え。 VBAのステートメントを数個覚えるだけで自動的に呼び出せるのに 専用の書籍なんかあるかボケ。
書店で立ち読みして自分に合いそうな物を買えばいいんだよ。 「おながいします」って何だよ、ふざけるな。
まあまあ・・・
マーマー
317 :
デフォルトの名無しさん :02/12/19 01:27
低学歴で知能指数も年俸も低い哀れな男を助けると思ってください。 参考書はちゃんと持っていますし、活用しています。 Inside COM, MSP, Rogerson Excel 97 VBA辞典 翔泳社変 それにしてもこんなに検索もHELPも使えなかった事例はありません。とほほ・・・・・
完全放置
>>317 Inside COM を読破できる貴方様を助ける事が出来る香具師など
このスレには居りませんです。
自分でCOMを作ってVBAで使いたいナリか?
最後のレスが「釣れた!」なわけだが、釣りとばれてしまって「釣れた!」って言うほどむなしいものはないだろうなぁ。
別にVCでも ATL使えば簡単にCOM(AxtiveX DLL) くらい簡単に作成できるのだが... あとは、対象のDLLに対して Regsvr32.exe *.dllと登録し ブビエディタのメニュー ツール 参照設定でチェックすれば new宣言でクラスが使えるし。 dim cl as new * (補完リストに名前がでてくる) 参照設定しない場合は クラスをobject型で宣言し set cl = createobject("DLLプロジェクト名-普通拡張子を除いた名前 レジストリエディタで検索すればでてくる") あとはそのクラス(cl)に対して操作をするだけ。 使い終わったら最後に set cl = nothingをつけて解放させる。 それほどキーキー騒ぐほど難しい回答でもないのだが。
> 別にVCでも > ATL使えば簡単にCOM(AxtiveX DLL) > くらい簡単に作成できるのだが... コンパイラ=VC++ とは限らんのだが。 まあ、こんな厨が使えてるとすればATLだろうけどな。 何言ってもわからんアホは放置しとけ。
324 :
デフォルトの名無しさん :02/12/19 11:12
>>317 Inside COMでは、VC++のなかだけで演習問題を淡々とやっていくだけなので、Excel VBA空何かをいろいろする、というような趣旨の具体的な内容は一切ありません。
>>320 COMの参考書にでてくるようなDLLをVC++で作って、それに実装される関数をExcel VBAから使いたい、ということです。
>>322 親切にありがとうございます。ご指摘の点は感覚的に理解できましたし、今VBAでちょ
っとやってみたら、なんとなくできそうです。やってみます。
ちなみに、COM的なDLLじゃなくて、一番単純で古典的なDLLでも、レジストリにのっち
ゃえば、参照できるんですよね?この線も自分でやって見ますけど。たしか、COMの
参考書にでてくるDLLの書き方には、カウンタとかがあって、初歩的なDLLの書き方
とちょっと違っていたような気がします。もう2年以上も前にやったことなのですが、思
い出しながらやってみます。
>>324 >番単純で古典的なDLLでも
Win32 DLLのことか?
そのDLLとActive X DLL とは全く別物だぞ。
Win32APIを呼ぶ方法(Declare宣言)
で使用しなければならない。
326 :
デフォルトの名無しさん :02/12/19 11:49
あ、やっぱり。ちょっと、そのWin32APIの路線からやってみます。そっちのほうが簡単 そう。InsideCOMにでてくるC++のDLLはIUnknownとかRefとかが出てくるし、どちらか といえばややこしそうなので、古典的なDLLのほうが簡単そうだと、自分では思ってい ます。でも、古典的なDLLも、VBAの『参照』からいろいろできるのでしょうか?なんか ぱっと見、全然できそうにないように思います。ま、自分でコード書く手間はいといませ んから、ツール系が使えなくてもいいのですが。レス感謝。バカでゴメン。
釣れすぎ
328 :
デフォルトの名無しさん :02/12/20 00:05
VBAからSheetのオブジェクト名って変更できますか?
>>328 Sheets("aaa").[_CodeName] = "bbb"
でできた気がする
できた!ありがとういい人
>>329 それじゃエラーになったよ。
Sheets("aaa").Name = "bbb"
で行けるよ。
>>330 あれ、訂正しようと思ったけど、できた?
今やってみたら、
Sheets("aaa").[_CodeName]
という記述ではダメだったわ。
一旦Worksheet型にキャストするか、または
モジュール名を直接指定すればできた。
Dim w As Worksheet
Set w = Sheets("aaa")
w.[_CodeName] = "bbb"
または
Sheet1.[_CodeName] = "bbb"
>>331 それはシート名だろ。質問はシートのモジュール名なんだが。
333 :
デフォルトの名無しさん :02/12/20 02:54
333げと
>>332 質問者じゃないが良い情報をありがとう。
ヘルプには
「実行時に、このプロパティの値をコードで変更することはできません。」
なんて書かれてますね。
-------------------------------- 1975213 1976172 1982149 198371 1984150 1985112253343 1986122151173 198754 19884 -------------------------------- という -------------------------------- 【西暦】 【コード1】 【コード2】 ↑ここは、あれば3,4と続く に並ぶファイルがあります。
これを 経年的に見るために -------------------------------- 1975213 1976172 1977 1978 1979 1980 1981 1982149 198371 1984150 1985112253343 1986122151173 198754 19884 -------------------------------- という風に【西暦】を年が`続いていくよう'に 挿入していきたいのです。 アルゴリズムとして どのように書けばスマートに書けるでしょうか?
済みません。レイアウト崩れました。 213 172 149 71 150 , 112 ,253 ,343 122 ,151 ,173 54 4 がコードで 1975 1976 1982 1983 1984 1985 1986 1987 1988 が【西暦】です。
シートに貼り付けてsortメソッド
>>335 西暦とコードを分けてシートに貼り付けて、西暦の優先順位を高くして並べ替え(Sort)
それか、全部のデータを文字列として並べ替え
339 :
デフォルトの名無しさん :02/12/22 03:56
Excelの関数としてはNormSDist、つまり、標準正規分布があるのに、なぜか、VBAの中では使えません。 VBAのHELPをいろいろ検索したり、ネットでVBAで累積標準正規分布積分を簡単に計算する方法を探し たのですが、見つかりません。 ビルトイン関数として必ずあるはずだと思うのですが、ご存知の方、教えてくださいませんか?
>>339 Application.NORMSDISTではだめだった?
341 :
デフォルトの名無しさん :02/12/22 04:47
>>340 ご親切にありがとうございました。うまくいきました。現在、XLLに実装されている関数を呼び出せずに苦労しています。アドインにはちゃんと出るんですが・・・・・
>>341 アドインをVBAから呼び出すという事ですか?
343 :
デフォルトの名無しさん :02/12/22 05:46
>>342 そうです。でも、自分で今回は解決できました。
Runを使えばよかっただけの話です。(爆)
344 :
デフォルトの名無しさん :02/12/22 12:57
(爆)使うやつは氏ね。
>>344 つぅか有言実行がルールだろ。
回線切って首つり自殺した奴なんて数えたらきりがないぞ。
>>343 は爆死を選択か。まぁ、うまくいけば一瞬だな。
346 :
デフォルトの名無しさん :02/12/22 13:54
>1 一番の違いはマクロセキュリティのデフォルト値でしょう。 故にブックのモジュールに書くのはやめた方がよい。イベントプロシージャではなく、オブジェクトにマクロ登録すべし。
347 :
デフォルトの名無しさん :02/12/22 16:20
コンボボックス上で表示される複数の選択肢は、参考書等によれば、シート上の セルから持ってくる場合がほとんどのようです。 ぼくは、VBAそのものにその選択肢となるものを埋め込んでしまいたいのですが、 やり方がわかりません。 で、いろいろ調べたのですが、シート上から持ってくる方法(つまりすでに知っている 方法)しか見つかりません。 C++のように、文字列の配列みたいなかんじでVBAの中に定義して、コンボボックス のプルダウンメニューから選択できるようにしたいのです。おながいします。
おながいします。
おながいします。
>>347 単にStringな変数宣言して初期値放り込んでやればいいんでは?
350 :
デフォルトの名無しさん :02/12/22 16:40
>>349 また徹底していじめられるかと思いましたが、マジレスが着たのでとてもうれしいです。
複数の選択肢をVBAのスクリプトの中で指定したいのです。ご指摘の方法だと、ひと
つしか指定できませんから、コンポボックスでプルダウンしても他になにも出てきませ
ん。Stringで複数の選択肢を配列のように指定して、プルダウンで選択できるように
することができますか?
>>350 >ひとつしか指定できませんから
必要な分その定数的な変数作るとか配列にするとか。手はいくらでもあると思われますが。
352 :
デフォルトの名無しさん :02/12/22 17:22
>>351 その辺はぼくもなんとなく想像できたのですが、具体的にどうコードを書けばいいか
わかりませんでした。セル範囲を指定する古典的な方法をなんとか応用して、配列
の線、複数の提携文字列の線、両方でアプローチしてみます。プロパティから指定
する方法があれば便利だな、と思ったのですが・・・・・コードも一発でわかるし。
353 :
デフォルトの名無しさん :02/12/22 17:23
突然の質問ですみません。 シートにオプションボタンを15個くらいつけたら 起動時間がずいぶんかかるようになってしまいました。 これはどうにもならないのでしょうか?
コンボボックスのTextプロパティに配列を代入する方法ですが、ダメでした。 ListFillRangeを使ってセルの範囲を使う方法は使いたくないのです。 どなたかよいお知恵を・・・・・
フォーム名の名前の文字列でフォームって表示できますか? UserForms(フォーム名).Show でうまくいきませんでした。
>>356 直接の方法は無いと思う。
何らかの工夫(例えば表示するコード自体を実行時に生成するとか)をしない限り。
>>350 学習能力ゼロの能無しは放置。
といきたいところだが、いいかげんマジで目障りだから二度と来んな
糞マルチ野郎。
了解しますた。
359 :
デフォルトの名無しさん :02/12/22 23:52
>347 そんな時にはAddItem メソッド使え With ComboBox1 .AddItem "おまえ" .AddItem "ちったー" .AddItem "生きてるうちに" .AddItem "頭使えよ" End With どうよ
360 :
デフォルトの名無しさん :02/12/23 01:32
>>359 実は『う〜、世にでているアプリはみんなできてるんだから絶対方法がある
はずだ〜。こうなったらプロパティーを一つ一つ調べてみるべ。』と思って地
道にやっていたら、UserForm_Initialize()のところでAddItemがあることがわ
かりました。で、ここで定義した値が他の関数からうまく参照ができることま
で確認して報告しようと思っていたんですけど、せっかくのご返答ですから、
お礼を兼ねてご報告します。ぼくは低学歴で、年収も低く、キャリアもかなり
しょぼいので、みなさんがまぶしいです。一生懸命検索するよりも、一番最
初の親部分からヘルプをなめるのも有効ですね。
>>359 さん、ありがとう。マルチ、ごめんね。
超ウザい。二度と来んなマルチ野郎
362 :
デフォルトの名無しさん :02/12/23 04:31
>>361 >>360 です。なんとかフォームらしいフォームができました。あとはグラフ関連のマクロを書いてなんとか一段落しそうです。
では。
364 :
デフォルトの名無しさん :02/12/23 17:16
Excelマクロで作ったんだけど、 ファイルサイズが700Kでセーブが異様に遅くなってしまった。 で、どこがそんなにでかいのかと思って、 シートとかフォームとか消していったんだけど、 全部消しても300Kまでしか減らなかった。 新規のワークブックは30Kぐらいなのに。 これは何のデータですか?
>>364 なぜかしらんか、VBAで色々編集してるとサイズが大きくなるよね。
新規のブックに全部インポートすれば、かなり小さくなるはず。
366 :
デフォルトの名無しさん :02/12/25 00:09
初めまして。質問させてください。 EXCEL VBAでWorksheet_Changeを使っているんですが、 そのプロシージャ(?)の中でセルに値を入れると またWorkSheet_Changeが呼び出されて無限ループになってしまうようです。 数値を扱うのでセルに値を入れるときは文字列型にしたり パブリック変数でフラッグ立てる真似事したり、 他のワークシートを作ってフラッグ立てる真似事したり(もうメチャクチャ) どうにもなりません。 プログラミングの経験はN88 BASICだけです。後はLOGO... 絶対何か見逃してるんと思うですけど、もう限界です。
367 :
デフォルトの名無しさん :02/12/25 00:09
ごめんなさい、sage忘れました。 今の状態はこんな感じです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer, j As Integer, k As Byte, h, flag01 Dim first_heat_min(10, 2) As Byte flag01 = Target If TypeName(flag01) = "String" Or _ TypeName(flag01) = "Single" Then GoTo Label01 flag01 = "" h = Empty For i = 0 To 10 For j = 0 To 2 k = k + 1 h = Cells(k, 6).Value If TypeName(h) <> "String" Then first_heat_min(i, j) = Cells(k, 6).Value Next j Next i k = 0 For i = 0 To 10 For j = 0 To 2 k = k + 1 If first_heat_min(i, j) <> 0 Then Cells(k, 11) = " " & (first_heat_min(i, j) + 0.0001) Next j Next i Label01: End Sub お願いします、何かヒントを下さい
フラグでいいじゃん。何の問題が?
>>369 速レスありがとうございます。
フラッグの立て方も間違えてるんでしょうか?
僕は標準モジュール内でパブリック変数を宣言してセルに値を入れる前に
false、いれ終わったらtrueに戻して、
プロシージャ(?)始まったらすぐにfalseならExit Sub
としています。
もしかしたら何か大きな勘違いをしているんでしょうか?
あぁ、これ動かないってこと?
>>371 あ、そうですね。
前はWorkSheets_Changeからcallで標準モジュール内のプロシージャ
を呼び出してたんですけど、そうしたら無限ループになってました。
今WorkSheets_Change内でやったら今度は371さんの言う通りに
動きませんでした。最初にフラッグをTrueにせんとあかんかと思って
Double_Clickイベントを先に作ってフラッグをTrueに設定してみたりしましたが
だめでした。
俺の場合 Private Sub Worksheet_Change(ByVal Target As Range) Static ExcFlg As Boolean '二重起動防止 If ExcFlg = True Then Exit Sub ExcFlg = True 処理... ExcFlg = False End Sub もっといいのあるかも知れんがとりあえずこれで。寝る。
えっと連続投稿で申し訳無いんですけど、 WorkSheet_Changeイベントを一時的に無効にする メソッド(?)って無いんでしょうか?
確かイベントを止められたはず。でもよけいあれな気が
>>373 ありがとうございました。374でダブって申し訳ありませんでした。
なんとかなりました。
Static...勉強不足でした。今からヘルプを読み返します。
たびたびすいません。ヘルプを参照したんですが、
>Dim ステートメントの代わりに
>Static ステートメントを使用すると、宣言された変数は、
>モジュールの実行中、値を保持します。
「モジュール」の概念を理解していないので
混乱してしまいました。一晩かけて勉強させて頂きます。
>>369 さん、373さん、夜分遅くありがとうございました。
(もしかして同じ方ですか?だったらごめんなさい)
メリークリスマス。
378 :
デフォルトの名無しさん :02/12/25 01:01
>>374 EnableEventsの事か?
でもこれはエラー処理をしっかりやらないと結構とリ扱いが難しいよ。
>>378 詳細を教えていただけますか?
今ヘルプを参照した限りではそう難しく無さそうなんですが...
どういう場面でエラーが出やすいんでしょうか?
>>379 どもです......ん?
>>380 378ではないが、仮にEnableEventsをFalseにしている状態の時に
実行エラーが発生してプロシージャが中断すると、Falseのままに
なってしまうのでまずいということだと思う。
エラーをトラップしてEnableEventsを元に戻せるようにした方がいいと。
それにしても糞コードだな。
なんで Byte型使ってんの(小さい方がいいと思ってるの)?
なんで k しか使ってないのに i や j でループしてんの?
ループも1ヶ所にまとめられるだろ。↓のような感じで。
Dim h As Variant, i As Long, first_heat_min As Long
Select Case VarType(Target.Value)
Case vbString, vbSingle: Exit Sub
End Select
For i = 1 To 33
h = Cells(i, 6).Value
If VarType(h) <> vbString Then
first_heat_min = h
If first_heat_min <> 0 Then
Application.EnableEvents = False
Cells(i, 11).Value = " " & (first_heat_min + 0.0001)
Application.EnableEvents = True
End If
End If
Next i
ちなみに俺だったら、 Dim r As Range, c As Range Set r = Intersect(Cells(1,6).Resize(33), Target) If r Is Nothing Then Exit Sub For Each c In r 'ここでc.Valueを判定してから c.Offset(,5).Valueをセット Next c のような形にする。
>>381 ありがとうございます。参考にさせて頂きます。
>なんで k しか使ってないのに i や j でループしてんの?
ご指摘もっともです。
まだWorksheet_Changeが動くか試してる状態だったんで
とりあえず適当にコードを継ぎ接ぎした結果がこれです。
でも
>>382 はすごく参考になりました。
ありがとうございます
他のBookのModule内に定義されてる関数を呼ぶのってどうしたらいいんでしょうか? また、他Bookに置いてあるボタンをVBAのコードから「押す」という動作をさせる事は可能でしょうか?
385 :
デフォルトの名無しさん :02/12/28 21:26
MACのエクセルVBAでメール送信できないのですが、 WINと同じようにApplication.SendMail recipient:="あどれす", subject:="件名" では無理なのでしょうか?知っておられればどうか教えてください。
>384 開いてればね
387 :
デフォルトの名無しさん :02/12/31 17:40
VBA で Set obj = new MyClass とかやったとき、必ず実行される C++, Java でいうところの コンストラクタを探しているんですが、そーゆーのってないんでしょうか? 今は、 init ってサブルーチンを実行前に必ず動かして お茶を濁していますが。 Set obj = new MyClass obj.init ' ←コイツ obj.XXX
2000だと無いんじゃない? vbだけど.netでコンストラクタが用意されたとかえばってたくらいだから。 initializeイベントをデフォルトコンストラクタとして使うんじゃなかったかしらん?
>>378 VBAにいおけるコンストラクタ:
Private Sub Class_Initialize()
デストラクタ:
Private Sub Class_Terminate()
>>388 ,
>>389 ,
>>390 ありがとう!
おかげで AssociatedArray クラスを作れたよ。
Perl の連想配列もどきを実現できました。
これで年明けに来る仕事こなせます。
initialize イベントの発動タイミングがいまいちわからないけど、
こっちの方もいろいろいじってみます。ありがとー。
# なんでこんな大切なものがヘルプで見つからないんだ(ブツブツ
もうちょっとわかったので追記。 クラスモジュールを編集するテキストエディットコントロール(っていうの? のすぐ上にある、 (General)を Class にして、その右にあるコンボボックスから initialize を選べば自動でプロシージャが挿入されるんだね。 terminate も同様。すばらしい。 イベントの発動タイミングはデバッガで見ると、 Set obj = new AssociatedArray だ。まさに、オブジェクトが作られたタイミングだね。すばらしい。
393 :
デフォルトの名無しさん :03/01/01 14:17
>>391 連想配列もどきなら、Dictionaryオブジェクトでいいんじゃないのか?
あのヘルプは使えないね
395 :
デフォルトの名無しさん :03/01/01 17:27
質問があります。 A,Bのブックがあり、それぞれデータを共有しながら単独で動きます。 一つどうしても共有化できなかったデータがありBで必要になったのでAをマクロ無効にしながら開いて参照したかったのですが 無効にする方法を見出せずにいます。 Openで開いても、GetObjectでインスタンスに乗せてもA側のWorkbook_Openイベントがfireされます。 マクロを無効にして他ブックを開きたいのですがどの様にしたら良いでしょうか?
別の方法を考えましょう
>396 レスありがとう。 分かりました。Aの変更時と同時に他のリソースに書くことにします。
398 :
デフォルトの名無しさん :03/01/03 12:07
クラスモジュールで this ポインタってあるんでしょうか。 文字列演算が多いので MyString.create(str).func1.func2.func3.to_string とかやりたいんですが。
399 :
デフォルトの名無しさん :03/01/03 12:41
400 :
デフォルトの名無しさん :03/01/03 13:11
マクロ初心者です。 質問させてください。 A B C D E F 1. リストNo 数値1 数値2 数値3 2. 1 0326 3124 0001 3. 2 0327 3125 0002 4. 3 0328 3126 0003 5. 4 0329 3127 0004 6. 5 0330 3128 0005 上記のような表があるとして、セルに記入された数値と一致する リストNoのはいったセルをアクティブにする方法を教えてください。 F1に"3"と入れるとA4がアクティブになるような。
>>399 Me ってうつと this ポインタになるのかと思った。
違うみたい。
...Me ってなんだ?
402 :
sn00pie :03/01/03 14:18
>>400 VBA はじめたばかりの sn00pie です。
シートは1枚と仮定。
ガンバレ。とりあえずリファレンス買え。
Sub SelectAllSameValues(value As String)
Dim cell As Range
Dim rangeString As String
rangeString = ""
For Each cell In ActiveSheet.UsedRange
If cell.value = value Then
rangeString = rangeString + cell.Address(False, False) + ","
End If
Next cell
rangeString = left(rangeString, Len(rangeString) - 1)
Range(rangeString).Select
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address(False, False) = "F1" Then
SelectAllSameValues Target.value
End If
End Sub
キーワード Me の使い方を教えてください。 クラスモジュールを追加して、 Option Explicit Public Function returnMe() As Class1 returnMe = Me End Function Public Sub printMsg() MsgBox "hell world" End Sub 次に ThisWorkbook に Sub testKeywordMe() Set obj = New Class1 obj.returnMe.returnMe.returnMe.printMsg End Sub として実行できると思ったのに、できません。 ヘルプには Me が this である、という記述に見えるのに どこが間違っているんでしょうか?
>>sn00pie さん わぁ こんなに早くレスもらえるとはおもってませんでした。 さっそくためしてみます。 ありがとうございました。
Me を返す方法をずーと考え続けてました。 よーするに、Me は Function の戻り値として使えないみたい。 引数として他の Sub, Function に Me を渡すことはできるみたい。 もし、obj.func1.func2.func3をしたい場合は、 各メソッドでインスタンスを作り直す必要がある、と。 簡単なバッチ処理を行う分には Excel/VBA でいいけど、 大規模になるとつらそうだな。この言語。 ヘルプは見にくいし、エラーメッセージが婉曲っつーかなんつーか。 ちょっとしたこともトリッキーな手法にならざる得ない気が。 # 私は日曜プログラマですが、プロプログラマは大変だろうな。
406 :
デフォルトの名無しさん :03/01/04 02:03
度々ここでお世話になっているものです。 今回は、グラフを作成する際の参照元データの指定法です。 一般的には、Range等を用いて、セル上の数値を元にグラフを作成しますが、VBAのマクロ内で計算した数値を格納した配列を直接渡したいのです。 どうすればいいかわかりません。SourceやRangeの関連は全部調べましたし、持っている5冊の参考書内でもいろいろ探してみたのですが、一向に見つかりません。 おながいします。
407 :
デフォルトの名無しさん :03/01/04 07:00
>>403 Public Function returnMe() As Class1
Set returnMe = Me
End Function
か?
>>407 そうかリファレンスの代入だったのか。
「実行時エラー '91': オブジェクト変数または With ブロック変数の設定がされていません。」
ってときは Set 抜けの可能性ありってことですか。
・・・なんてわかりにくいエラーメッセージなんだろう。
Option Explicit
Sub ExecuteDemo()
Dim myStr As MyStringClass
Set myStr = MyString.create("1234567890")
MsgBox myStr.leftString(8).rightString(4).getString ' ==> MsgBox "5678"
End Sub
あとはインスタンスを作るときに引数を指定して渡せれば
MyString って標準モジュール(function create のみのモジュール)も書かなくて
すむが、これで当初の目的は達成です。ありがとー!
>>406 です。今日も1時間ぐらいいろいろと検索で探したのですが、
グラフのデータを配列で直接渡す方法が見つかりません。どなた
か名案をご存知でしたら、どうかよろしくお願いします。現時点
では、一時的にシート別位置にデータを吐き出して、それでグラ
フを作っています。どうしても配列から直接渡したいのです。よ
ろしくお願いします。
410 :
デフォルトの名無しさん :03/01/04 21:33
くだらない質問だけど VBAもVBA.NETになると思う?
>>410 らしいね。 VBAのエンジンとVB.NETのエンジンは共有にするそうだ
>>409 なんでシートからグラフ作っちゃだめなんですか?
worksheet の visible で非表示でユーザに見えなくするとかは?
>>412 解決できました。汚いコードですがこんな感じです。要するに、文字列をこんな具合に作ってあげて、投げてあげればできます。
Public Sub CommandButton2_Click()
Dim co As ChartObject
Dim Y As Variant
i = 1
Y = "={"
While i < 5
Y = Y & S(i) & ","
i = i + 1
Wend
Y = Y & S(5) & "}"
Set co = ActiveSheet.ChartObjects.Add(10, 10, 300, 200)
With co.Chart.SeriesCollection.NewSeries
.XValues = Worksheets("Sheet1").Range("A2:A6")
.Values = Y
End With
End Sub
今更ですが。
>>393 > 連想配列もどきなら、Dictionaryオブジェクトでいいんじゃないのか?
自作とどっちがいいか検討しました。自作の方がよさそうです。
(1) CreateObject ってラストに Nothing 代入しないとだめなのがめんどい。
(2) CreateObject だと継承できないのが痛いです。
どっちも Directory じゃなくて CreateObject のせいですが。
416 :
デフォルトの名無しさん :03/01/06 19:57
とても困っております。質問させてください・・・ はじめからできているグラフにデータを貼り付けてファイルを作成しているのですが、 if データ系列に近似曲線がなかったらthen 処理をしない endif という処理をしたいのです。 グラフ自体から”データ系列に近似曲線がなかったら”という風に値が 返ってくる方法はないでしょうか? グラフの数が多すぎ&元データの場所もバラバラなので、グラフごとの元データを チェックするより、グラフに線がなかったら?と認識したいのです。 または「グラフの元データの範囲」の値を取得する方法はないでしょうか? よろしくお願いします。。。
>>416 Sheets("Sheet1").ChartObjects("グラフ 1").Chart.SeriesCollection(1).Trendlines.Count
でいけるようです。
>>417 こんなに早いレスありがとうございます!
さっそく試してみます。ありがとうございます!
今試してみたのですが、グラフに線があるときはいいのですが、線が無い 時にゼロの値が返ってきません。Trendlinesプロパティを取得できませんの エラーが。。。今はカウントを変数に入れてゼロだったら?のif文に しているのですが、これがいけないのでしょうか?もう全然わかりませぬ。
>>419 そうでしたか?一度近似曲線を作って消してからならOKのようです。
今ちょっと確かめてみます。
すみません。。
>>419 やってみました。近似曲線を作らなくても、系列番号をSeriesCollectionで
指定してやれば、Trendlines.Countはちゃんと0を返してくれました。
カウントを変数に入れてゼロだったら?の意味がよくわかりません。もう
少し詳しく教えていただけないでしょうか。
GG = ActiveChart.SeriesCollection(1).Trendlines.Count If GG = 0 Then GoTo n1 End If ↑こんな感じです。使い方が間違っているのでしょうか??
>>423 別に間違ってないですねえ。もしかしたら系列が一つもないグラフを参照する
事もあるのですか?
>>424 そうです、あります。。。場合によってはデータが空白の時もあるので、
そういう時はグラフには何も表示されないんです。
やっぱりグラフからっていうのは無理なんでしょうか?
>>425 ActiveChartがNothingの時はSeriesCollection以降を参照しないように
変更してみたら?
>>425 違った、SeriesCollection.Countが0でない時のみTrandlinesを参照するように
したらいいと思います。
こんな感じ。 If ChartObjects("グラフ 1").Chart.SeriesCollection.Count Then Range("a1") = ChartObjects("グラフ 1").Chart.SeriesCollection(1).Trendlines.Count End If
なるほど!ちょっとやってみます!
オブジェクトは、このプロパティまたはメソッドをサポートしていません のエラーが出てきました。。。SeriesCollectionはオブジェクトを指定 しないと使えないものなのですか? If ActiveChart.SeriesCollection.Trendlines.Count Then だとこのエラーで、 If ActiveChart.SeriesCollection(1).Trendlines.Count Then だと(1)の線がグラフにないので認識してくれません。 もう私のレベルでは対応できません。。。こんな私に親切に教えて頂けて 感謝感謝デス
>>430 もう少しですね。Trendlinesをいきなり参照してしまっているのでエラーに
なっているのだと思います。
1.SeriesCollection.Countの値をチェックする。
2.1.が0の時は何もしない。0以外の時に初めてTrendlines.Countを調べる。
のようにすればいいはずです。SeriesCollectionが0の時は、系列が一つも
ないわけですから、当然近似曲線もないはずですから。
>>430 If ActiveChart.SeriesCollection.Trendlines.Count Then
はエラーになります。
If ActiveChart.SeriesCollection.Count Then
でまずチェックして下さい。
>>431 ありがとうございます!今このように
GG = ActiveChart.SeriesCollection.Count
If GG = 1 Then
やってみました。成功したと思ったのですが、なぜか近似曲線の無いグラフ
にまで1が入ってきたので調べてみたところ、このグラフは元のデータを
データ範囲からでなく系列のXの値,Yの値に直接入れているようで、
これはデータが入っていなくても系列がある事になってしまうんでしょうか?
>>433 If ActiveChart.SeriesCollection.Count Then
GG = ActiveChart.Chart.SeriesCollection(1).Trendlines.Count
If GG Then
近似曲線のある時の処理
End If
End If
のようにしてみて下さい。
>>434 すみません。なんとお礼を言っていいか。。。
If ActiveChart.SeriesCollection.Count Then
GG = ActiveChart.SeriesCollection(1).Trendlines.Count
If GG = 1 Then
近似曲線のある時の処理
End If
End If
でやってみた所、GG = の所で引っかかりました。
SeriesCollection(1)が認識できないようです。
ここまで教えて頂いたのに申し訳ありません。。。
>>435 >>434 に間違いがあり、
GG = ActiveChart.Chart.SeriesCollection(1).Trendlines.Count
ではなくて
GG = ActiveChart.SeriesCollection(1).Trendlines.Count
でした。
私の所ではこれでうまく動いているのですが・・・・・・
なんででしょう・・・グラフ右クリックの元のデータのところをデータ範囲からでなく 系列のXの値,Yの値に直接入れているのは関係ないでしょうか? こんなことでお手間をとらせてごめんなさい。。。
>>437 ソースがRangeでも、配列定数でも関係はないと思います。
どこが違うのかなあ?グラフは確実にActivateされてますよね?
一応ActiveChart.ChartArea.Selectにしてます。 データがちゃんとあるところは大丈夫なのですが、 ない所になるとひっかかってしまうんです。。。
こんなできる人が近くにいてくれればいいのになぁ。。。 あぁぁもうダメです。。。
441 :
デフォルトの名無しさん :03/01/06 23:55
はじめまして、こんばんは。 唐突ですが、EXCELで3次元のモデルって、実現可能でしょうか? ちなみにモデルの用途は熱解析です。(汎用ソフトがあるのは知ってます が、事情がありまして。。。) ご存知のかた、詳しい方、お願いします。
>>440 データがない時に引っ掛からないように、SeriesCollection.Countが0でない
事をチェックしているんですがねえ。うーんおかしいなあ・・・・
ああ
>>442 ですよねぇ。。SeriesCollection.Countの値をSeriesCollection()の
()の中の引数にしてみたのですが、これもダメでした。SeriesCollection.Countは
データがあっても無くても1が入ってしまいます。でもTrendlines.Count
を実行しようとするとエラーに。。。ほかの方法を考えたほうがいいでしょうか?
長々考えていただいて申し訳ありません。
445 :
デフォルトの名無しさん :03/01/07 19:50
質問させてもらいます。 ある文字列がアルファベットや数字、つまり"-"や"$"などの 記号を除いた半角英数字で構成されているかどうかを 確認するにはどうしたらよいのでしょうか?
446 :
sn00pie :03/01/07 22:12
447 :
デフォルトの名無しさん :03/01/07 23:59
お前のような脳機能低下野郎は初めてだよ。 秀丸で確認すりゃいいだろ!ボケ! 反論は認めんからな(秀丸で瞬時に確認出来るだろ。10Mのテキスト文字列でも 3分位で出来るぞ、バカ)。
>>446 回答ありがとうございます。
やっぱりそうするしかないんですね。
メールアカウントなどで記号が使えないものが多いから
既にそういうのを摘出する機能があると考えていたんですが。
まぁ、大した処理じゃないですけどね。
>>447 "Excel"でってことなんですけど。。。
質問の仕方が悪くてどうもすいませんでした。
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
450 :
デフォルトの名無しさん :03/01/08 23:12
Excel 2001:macのVBで2バイトの文字コードから文字を得るにはどうすれば よいのでしょうか? シート上で =char(9008)と入力するとJISコード表から"0"が表示されます。 VBAでMsgBox chr(9008)とすると、"0"ではなくコードと全く関係の無い 文字列が表示されます。 なにか方法はありますでしょうか? よろしくお願いします。
IPだけ?
串対策は? dカツには何ソースですか? 何ソースですか?
内部告発者=ディープスロートと言う
>323 立たなくなるのは大変危険かと思われ。
実は俺が本物のひろゆき
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
↓(´`c_,'` )プッ
大阪って何だよ
462 :
デフォルトの名無しさん :03/01/09 10:19
.Chart.SeriesCollection().NewSeries.Values = Y で元データを指定したいのですが、最大16個の数値しか指定できないので 困っています。これって拡張できないのでしょうか?拡張できないなら一 度セルに吐き出して、といったかんじでグラフを作成することになってし まいます。これは避けたいのです。 このようにしてX軸Y軸のデータを指定しています。Xは16個以上でも指定 できるのですが・・・・・名案がありましたらお願いします。 Set co = ActiveSheet.ChartObjects.Add(10, 10, 300, 200) With co .Chart.PlotBy = xlRows .Chart.SeriesCollection().NewSeries.XValues = X .Chart.SeriesCollection().NewSeries.Values = Y .Chart.ChartType = xlLineMarkers .Chart.SeriesCollection(1).Delete End With
ぴろゆき今日は早起きだな。
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
1chみたいにログ流出だけは避けてくれればとりあえずはいいかなと。 しょうがないでしょう、このご時世。
466 :
sn00pie :03/01/10 01:39
467 :
デフォルトの名無しさん :03/01/10 02:05
>>これなんですが、 Excel VBA で使えるんでしょうか? Excel2000でだけど、Visual Basic Editorを立ち上げて、ツール->参照設定でMicrosoft VBScript Regular Expressions を追加すると使えるようです。
内容証明が来たら、名誉毀損の書き込みがあったことを知りうるでしょ、
その時点で削除しなきゃだめよ、ってことだね
>>25
内容証明が来たら、名誉毀損の書き込みがあったことを知りうるでしょ、
その時点で削除しなきゃだめよ、ってことだね
>>25
内容証明が来たら、名誉毀損の書き込みがあったことを知りうるでしょ、
その時点で削除しなきゃだめよ、ってことだね
>>25
>>26 今回のケースでは、
名誉毀損の書きこみがあったと認識し、または認識しえたとき。= 内容証明が届いた時
でしょ? いいたい事があるならはっきりと仰って下さい。
ヤブ医者をヤブ医者と言って何が悪いんだか。 少なくともその人はヤブ医者に感じたんだろうが。 それを開き直る根性が全く解せない。
大型連休に固定が消えるのはいつものこと(ひろゆき含む)
>アクセスログってなに? 人を馬鹿にするな!
旺文社 国語辞典 若干(じゃっかん) 名詞・副詞 いくらか。少し。少々。
歪曲北朝鮮放送局が恐喝食中毒すし屋を第3位に。
スレタイの日本語、微妙におかしいね。
削除しなかったことが問題であって、IP取得は全くの見当違いだと思うんだが それよかズボラな削除体制どーにかしろって感じだな どさくさに紛れて都合の良い法律案を盛りこむ議会みたい 管理批判の多い板から記録してるっつーのもなんだかなあ
釣りじゃないのなら実に現実味のない意見だ
新しいスレ立てて議論してくれ。 スレタイと内容合わせようや。
484 :
sn00pie :03/01/11 02:24
>>467 > Excel2000でだけど、Visual Basic Editorを立ち上げて、ツール->参照設定でMicrosoft VBScript Regular Expressions
を追加すると使えるようです。
あー。MS記事の中の参照がどうのこうのっていうのはそういう意味でしたか。
さっそく VBA で楽しい正規表現ライフを暮らそうと思います。ありがとー。
IPっていうのはプロトコルの名称であって、ちゅあんとIPアドレスと 表記しなさいってのは聞き飽きたよ
249 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:52 ID:rLfxQ17l >荒らしとか犯罪のためなの? そす。 246 名前:心得をよく読みましょう[] 投稿日:03/01/08 17:52 ID:BH998yxV >ひろゆき 俺のお気に入りのスレとか荒されてるんだがそういうのにも有効? 257 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:53 ID:rLfxQ17l いずれは。
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
IDやめて、ここにIPを表示してしまえ。
どこぞの宗教団体を批判するスレ・レス出現
↓
どこぞの団体が、管理人にスレ・レス作成IP教えろ
↓
管理人がIP教える
│
├─────┐
↓普通 ↓異常
裁判 VXガス
こうなるとオウムに個人情報を知らせ 大量殺人にまで発展した
TBSと同じになるな。 カルトは裁判を起こすことが目的ではなく
都合の悪い相手を特定して殺害することが
IPを得る真の狙いだから真実の書き込みができなくなる。
平和な日本の昼下がり、
創価学会脱税疑惑を追及した市議会議員が自宅の団地で家事をしている。
すると突然、自宅の窓から化け物のような歪んだ力で
あっという間に空へ丸投げされて落下死する。
団地の部屋はコンビニへ買い物に行っているかのように
台所も洗濯物も何もかもがそのままの状態だ。
地元警察は創価学会と数日前から綿密な口裏合わせがあったかのように
他殺を自殺と決め付けてろくな捜査も現場検証もせず引き上げる。
http://www.sokamondai.to/ ちなみにフランス内務省は最高危険度カルト教団として
日本の創価学会を公式に認定した。
フランス政府公認のカルト教団と正義のために
たった一人実名で全面対決した市議に黙祷( ‐人‐ )
2ちゃねらーはプロバイダー責任法案を
国会で通過する前に反対しておけばよかったのに。
私は反対したが力が足りなかった。
かわってないよ。なにいってんだよ。
前スレで始めての1001Getを狙ったんだが、思ったほど終盤の勢いがなかったな
はじめまして 質問があります テキストファイルから読み込んで下記のような表を作らなければならないのです 文学部 工学部 理学部 法学部 医学部 合計 1.男性 2.女性 無記入 コードは 文学部:1 工学部:2 理学部:3 法学部:4 医学部:5 男性:1 女性:2 無記入:空白 です。 これの学部ごとの性別の人数と合計をだすプログラムの例を教えて欲しいです 文学部、男性等の文字は初めから入力されているので数字だけが出るプログラムを 希望します。 テキストには一行目が学部、二行目が性別のコードになっています 例 11 21 52 4 11 ・ ・ よろしくお願いします
うわっずれた 最後の例はコードの並び方で 11 21 52 4 11 ・ ・ こういう風に並んでいるということです
ひろゆきがこれなくなるじゃないか! 俺はひろゆきにレスされたいんだよ!
国内サッカー板 また落ちてます?
エクセルに取り込んだ画像の色のデータを取得する方法が、VBAに あるのであれば、教えてください。 たとえば、取り込んだ画像の、上から20ポイント左から20ポイント の位置にある、ドットの色が黒であれば、1を返してくるような プロパティーがあれば、教えてほしいのですが・・・
まだ心臓がドキドキしてるぞ馬鹿
お願いします・・・ 誰か助けてください・・
>500 漏れだったらこんな事だったらVBA使わない。 テキストを貼り付けて区切り位置ウィザードで別フィールドに整形してから DSUM関数で集計する。
>501 DCOUNTだわ、スマソ。
>>501 レスありがとうございます
でもこの課題はVBAプログラムで書いてこいと言われたんです
Do..Loopステートメントを使うみたいなんですが・・
重ね重ねすいません
払チ托イ
ということはなにか固定のほとんどは地方出身だということか。
>>503 ほい出来たぞ。久しぶりにBASICなんか組んだよ。
Open "InputData.txt" For Input As #1
Do
If EOF(1) Then Exit Do
Input #1, i$
Row = Mid$("BCDEFG", Val(Left$(i$, 1)), 1)
If Len(i$) = 1 Then
Column = "4"
Else
Column = Format$(Val(Right$(i$, 1)) + 1)
End If
Range(Row + Column).Value = Range(Row + Column).Value + 1
Range("G" + Column).Value = Range("G" + Column).Value + 1
Loop
Close #1
507 :
デフォルトの名無しさん :03/01/12 12:27
>>503 そうそう、2chに書き込んであるデータは行末尾に空白が一個入るから、
データをコピペする場合空白は削除しておいてね。
>>506 ありがとうございます!!
これで留年免れた・・
509 :
デフォルトの名無しさん :03/01/12 14:54
>>492 努力しろや。留年したほうがまし。
個人的意見ですが。
510 :
デフォルトの名無しさん :03/01/12 15:07
>>492 うわー。こんな問題も分からんのか......
退学すれば?諸悪の根源だよ。
511 :
デフォルトの名無しさん :03/01/12 15:21
>>506 >If EOF(1) Then Exit Do
のEOFってどういうことなんですか?
どういうときに使うんですか?
512 :
デフォルトの名無しさん :03/01/12 15:23
ファイルの終わりがきたらってことだ
>>511 入力するデータがなくなったら、DO...LOOPを抜けるために入れてあります。
ちなみに DO Until EOF(1) .... LOOP とすればIf文を一個減らせます。
>>506 なんで Format$(Val(Str(XXX))) を使うんだろう。
Format って日付の形式指定ですよね?
ならば Str(XXX) のままでいいと思う。
# VBA って sprintf 系の関数がなくてめんどいと思う今日このごろ
>>516 Strを使うと、先頭に不要なスペースが一つ入ってしまうので都合悪いのです。
たまに、「SASなんぞ知らないぞ。そんな糞言語だ。」っていう人がいますが、 なぜ、SAS言語がくそと呼ばれるのですか? 結構金融機関で使用しているところがあるのですが、 ほかの言語とどう違うのですか? 具体的に教えてください。マジで。
519 :
デフォルトの名無しさん :03/01/12 16:22
520 :
sn00pie :03/01/12 16:43
>>517 空白除去でしたら Trim がありますよん。
521 :
sn00pie :03/01/12 16:46
Property Get item(key as String, value as Variant) Property Let item(key as String) Property Set item(key as String) を同一クラスに実装しようとしたらできなかった。 できないものらしい。気づくのに1時間近くかかった。はぁ〜。(タメイキ
あ、オーバーロードできないっけ。 デフォルト引数はなかった?
523 :
sn00pie :03/01/12 20:26
>>522 僕のコメントについての発言ですか?
デフォルト引数があるか・・・?どういう意味でしょうか?
800!!
結局はまたループ・・・
526 :
sn00pie :03/01/12 20:41
ごめん。
>>521 についてですけど、今やったらできた。
さっきはなんでできなかったんだ。
.xls ファイルを再読み込みで変わるのか?ワカンネ
get, set, let 全部できました。ガセ流してごめん。
Sub PropertyDemo()
Dim obj As New Class1
Dim value As Variant
obj.item("abc") = obj
Set obj.item("abc") = obj
value = obj.item("abc")
End Sub
大分かかる
528 :
Win2k SP3, Excel2000 :03/01/13 14:39
VBEで検索する際に、検索文字列に漢字を入力しようとすると、変換が確定した時点 で文字化けしてしまいます。これってMSのバグ?
IMEはMS-IME2000です。
530 :
デフォルトの名無しさん :03/01/13 16:10
(^^)
掲示板の書き込みを鵜呑みにするやつはもっと悲惨だよ
>>530 ここにも貼って頂いて、、、どうもありがとうございます。助かりました。
(^^)
535 :
デフォルトの名無しさん :03/01/17 02:21
あらかじめ指定しておいたテキストファイルに、 表示されているエクセルデータを書きたして行くにはどうしたらいいのでしょうか・・ よろしければどなたか・・
536 :
sn00pie :03/01/17 11:11
>>535 指定するテキストファイルの中のデータを読み込み専用で開いて、データを読み込んで、閉じて、
書き込み専用で開いて、データを書きこんで、エクセルデータを書き込んで、閉じる。
最短とか、最良を選ばなくていいなら、これで十分だよね。
データの読み方はこのスレで紹介済みだよ。書き方も似たようなものだと思う。
何で悩んでるの?
VBAのことでわからないことがあり書き込みします。困ってる内容はエクセルで記録したマクロ↓に ファイル選択などのループ処理を加えたいのですが どうもよくわかりません どうかあたしを助けると思ってお願いしますm(_ _)m Sub Macro1() ' With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;D:\0115backup!\+00\u+00\-27u+00.txt", Destination:=Range("E2")) .Name = "-27u+00" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlFixedWidth .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(9, 1) .TextFileFixedColumnWidths = Array(12) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With End Sub ↑このマクロの中で"-27u+00.txt"のところの-27を(-30〜+30)に、E2を(B2〜BJ2)に選択ヶ所の番号をループ的に順番に選択させて,処理をループ処理にしたいのですが。。。 本当によろしくお願いしますm(_ _)m
ついでといってはナンですが、わたしにも教えてくださぁい Excel2000で2つのブックを開いていて、どっちにも複数のシートがあって、 シート名は重複してません。で、今注目したいブックが下にきているとき Function GetSendStatus() As Integer GetSendStatus = Worksheets(sheet_setting).Range("B43").Value End Function みたいなコードのところで「エラー9・インデックスが有効範囲にありません」が 発生します。 今操作中のブックにsheet_settingというシートがないゆえだと思うんですが ブック名まで指定しないとダメなんでしょうか?
>537 もーちっと見やすく書けや。
>>538 そのFunctionはどこに記述されているんですか?
対象のブック内に記述されているのであればThisWorkbookでそのブックを
指定できますが、そうでないとすると、対象となるブックを特定する情報
が必要になるでしょう。
>>540 ☆ゴン
|/
|( `Д´)ノ アイター!
|<( )へ
| >
そうだ、こんなときにこそ ThisWorkbook. を使えばよかったんですね!
バカだ・・・わたし・・・
いやいや、ありがとうございました!
すみません。 PostgresのデータをExcelに落としたいのですが、 どうすればよいか、書いてある本をご存知の方 いないでしょうか。 ご存知でしたら教えてください。 お願いします。
>542 適当にサンプル。Postgres使っていないから分からんが、こんなのでいけるんじゃないのか? ODBCは配布してるサイトから拾ってくる事。 Private Sub Connection_Test() Dim cnList As New ADODB.Connection Dim cmList As New ADODB.Command Dim rsList As New ADODB.Recordset Dim sConnectionString As String sConnectionString = "driver={PostgreSQL};server=(local);database=testdata;uid=saUser;pwd=;" cnList.ConnectionString = sConnectionString cnList.Open cmList.ActiveConnection = cnList.ConnectionString cmList.CommandText = "SELECT * FROM tblSample ORDER BY ID" Set rsList = cmList.Execute() Range("A2").CopyFromRecordset rsList rsList.close cmList.close cnList.close End Sub
>>545 詳細なコードまでありがとうございます。
なんだかいけそうです。
昨日までの鬱な気持ちがいっぺんで晴れました。
547 :
デフォルトの名無しさん :03/01/21 21:14
質問です。あるシートで、以下の関数を実行します。 'CommandButton1〜5を作成する関数 Public Sub t() Dim i As Integer ActiveSheet.OLEObjects.Delete For i = 1 To 5 Call ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1") Next i End Sub するとCommandButton1〜5が生成されます。それからもう一度実行すると、 CommandButton1,6,2,3,4が生成され、その次はCommandButton1,5,6,2,3が生成されます。 なぜこのような結果になるのか知りませんか? 想像では、オブジェクトの破棄している最中に生成しようとしたからだと思うんですが・・・ 意図したとおりに生成される方法を教えてください、おながいします・・・
548 :
デフォルトの名無しさん :03/01/22 00:37
ForNextでウエイト入れてみてはどうか
エクセルって計算ソフトなのに、高精度の変数使えないVBAでマクロ 書くってのはどうかしてるな。
550 :
自称「脳内SE」 :03/01/22 02:28
>549 それでC++ソースも生成してますが、何か?
551 :
デフォルトの名無しさん :03/01/22 02:34
とあるCADの簡易機能を移植しようとしてVBAを使用。 データベースに基づいてEXCEL上で数千本のLine描画は 厳しいんでしょうか?凄く遅くなりました。
552 :
sn00pie :03/01/22 21:23
>>549 高精度の変数使わない処理ならば良い。
VBA でひとつのテンプレシートから50枚のシートを自動生成しました。
必要なら高精度ライブラリ作れw
ネタニマジレス
マタニネジレス
高精度の変数ってなんのこっちゃいな
555 :
世直し一揆 :03/01/23 00:33
<血液型A型の一般的な特徴>(見せかけの優しさ・もっともらしさ(偽善)に騙され るな!) ●とにかく気が小さい(神経質、臆病、二言目には「世間」、了見が狭い) ●他人に異常に干渉する(しかも好戦的・ファイト満々でキモイ、自己中心) ●自尊心が異常に強く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようとす る(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際には たいてい、内面的・実質的に負けている) ●本音は、ものすごく幼稚で倫理意識が異常に低い(人にばれさえしなければOK) ●「常識、常識」と口うるさいが、実はA型の常識はピントがズレまくっている(日本 の常識は世界の非常識) ●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者に弱く 、弱い者には強い) ●あら探しだけは名人級(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす) ●基本的に悲観主義でマイナス思考に支配されているため性格がうっとうしい(根暗) ●一人では何もできない(群れでしか行動できないヘタレ) ●少数派の異質、異文化を排斥する(差別主義者、狭量) ●集団によるいじめのパイオニア&天才(陰湿&陰険) ●悪口、陰口が大好き(A型が3人寄れば他人の悪口、裏表が激しい) ●他人からどう見られているか、人の目を異常に気にする(「世間体命」、「〜みたい 」とよく言う) ●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度 も言ってキモイ) ●表面上意気投合しているようでも、腹は各自バラバラで融通が利かず、頑固(本当は 個性・アク強い) ●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う) ●自ら好んでストイックな生活をし、ストレスを溜めておきながら、他人に猛烈に嫉妬 する(不合理な馬鹿) ●執念深く、粘着でしつこい(「一生恨みます」タイプ) ●自分に甘く他人に厳しい(自分のことは棚に上げてまず他人を責める。しかも冷酷) ●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(例:「俺のほうが男 前やのに、なんでや!(あいつの足を引っ張ってやる!!)」)
(^^)
質問です。以下のコードをサイトから拾って来まして、 UserForm1にCommandButtonを5個作ってmacro1から呼び出す様にしたかったんですが 実行時エラー'424': オブジェクトが必要です。 と出ます。分かる方がいらっしゃいましたらアドバイスお願いします。 'UserForm1モジュール Option Explicit Option Base 1 Dim myClass1(5) As New Class1 Private Sub UserForm_Initialize() Dim myCmdBtns As New Collection Dim i As Integer With myCmdBtns .Add Item:=CommandButton1 .Add Item:=CommandButton2 .Add Item:=CommandButton3 .Add Item:=CommandButton4 .Add Item:=CommandButton5 End With For i = 1 To 5 Set myClass1(i) = New Class1 With myClass1(i) .Cmd = myCmdBtns(i) .Index = i End With Next End Sub
続きです。上で言い忘れてましたがClass1モジュールも作って以下を書き込んでます。 'Class1モジュール Option Explicit Private WithEvents myCmd As MSForms.CommandButton Private m_intIndex As Integer Public Property Get Cmd() As MSForms.CommandButton Set Cmd = myCmd End Property Public Property Let Cmd(ByVal cmdNewValue As MSForms.CommandButton) Set myCmd = cmdNewValue End Property Public Property Get Index() As Integer Index = m_intIndex End Property Public Property Let Index(ByVal intNewValue As Integer) m_intIndex = intNewValue End Property Private Sub myCmd_Click() MsgBox "クリックしたボタンはCommandButton" & m_intIndex End Sub Sub macro1() Show.UserForm1 End Sub
559 :
デフォルトの名無しさん :03/01/24 18:11
失礼。あげさせて頂きます。
いやだー、スカート捲らないでよー、サイテーー
>>561 ご回答、ありがとうございます。
動きますか・・・私のは何故動かないのだろう・・・。
Excel2000でも動きますよね?
>>562 した事は、macro1をSheet1に置き、UserForm1にコマンドボタンを5つ作成し、
UserForm1モジュールをUserForm1のマクロに置き、クラスモジュールを
作成してClass1をコピペ、macro1を実行しただけです。
>>563 Sheet1と標準モジュールの違いはありますが、あとは同じ様にやっているんですけどね。
(試しにSheet1にmacro1を置いて実行しても、結果変わらずエラーでした)
動く事だけ分かっただけでも大きな収穫です。
もう一度やり直してみたりExcel2002上で試したりしてみます。
ありがとうございました。
手元にExcel2000置いてないので試せないんですよ。 2000と2002で何か違うのかな?
>>565 違うのかもしれませんね。
明日か明後日Excel2002を使う機会がありますので
試してみます。
コマンドボタンやコンボボックスを、プログラムで自動作成する やり方ってありますか?例えば、なにかのアクションを起こした ときに、自動で任意の大きさ、場所へコマンドボタン等が自動で シート内へ貼り付けれるようなカンジで。
568 :
デフォルトの名無しさん :03/01/25 11:59
あらかじめ作っておいて必要に応じて表示したり隠したりリサイズしたり って方法ならありかと
569 :
デフォルトの名無しさん :03/01/25 12:00
>>565 Excel2002でうまく動く事を確認しました。
というか試している過程で気づいたのですが、単なるコピペミスの可能性が大で
Excel2000でも動くような気がしました。どうもありがとうございました。
>>570 動いてよかったですね。
Excel2000でもこのプログラムを見る限りは動くような気がします。
>>571 ありがとうございます。
これ(オブジェクトの擬似配列化)を見つけた時は目をキラキラさせて喜んだもんで
早速月曜日に会社で試したいと思います。
シートの文字列をハイパーリンク化する命令はどう記述すればいいの?
↑ シート × セル内の ○ でした。
>>573 「マクロの記録」をすれば一発で分かるけど
Range("A1").Select
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="
http://2ch.net/ "
誰か272にいちようツッコミを入れてあげてください
セルの計算式の話なんだが、ユーザ定義ワークシート関数(VBA)の中で Range.Find()が動かない。NT4のOfficeは97。 ・・・・・2000でXPだと動くな。ただのバグか。 あと、VBAではないんだが=COUNTIF(A1:A500,"<>0") としていると、 途中のセルをClearContentsしても数が変わらない・・・ (※delキーでクリアしても確認できる) 2000+XPでも再現。<>は駄目なのか? 初回とかは成功するから性質が悪い。 =COUNTIF(A1:A500,">0")+COUNTIF(A1:A500,"<0") に置き換えることにしたが、顧客側担当者と二人で頭抱えたよ・・・ 数十もあるブックで、どれくらい気付かずに使ってるか知れたものでは ないから。
579 :
デフォルトの名無しさん :03/02/06 11:18
すいません どなたか教えてください EXCELVBAで例えばユーザが引いた罫線が メニューのセルの書式設定からひかれたものか、 罫線パレットからひかれたものか 判断するようなことってできませんか? 要はユーザの操作がしりたいんですが できませんかね
今、自分が開いているエクセルのファイル名の取得って マクロでどうやるんですか?
>>580 ThisWorkbook.Path
ThisWorkbook.Name
583 :
デフォルトの名無しさん :03/02/07 21:16
質問です。VBAでXMLファイルを読み込みたいのですが、DOMとかって使えるのでしょうか? 詳しく書いてあるサイトか本があったら教えてもらえないでしょうか? よろしくお願いします。
2変量標準正規分布の積分をマクロでするにはどうしたらいいのでしょうか? たとえば、[-1,2]×[3,4]の場合を教えてください。
質問です。 たとえば、列A1からA10まで値が入ってるとします。 そして、B1からB10にはA1からA10までの値を参照してるとします。 そこで、A11に値が新たに追加された場合、B11にも自動的にA11の値が 入るようにするには、どう書けばよろしいですか?
588 :
デフォルトの名無しさん :03/02/09 19:12
>>586 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ActiveCell
If .Column = 1 Then
.Offset(-1, 1) = .Offset(-1).Value
End If
End With
End Sub
590 :
南斗水鳥拳のレイ :03/02/09 23:23
>>585 の
>2変量標準正規分布の積分をマクロでするにはどうしたらいいのでしょうか?
>たとえば、[-1,2]×[3,4]の場合を教えてください。
を答えられる人いないの?
漏れは、多変量解析と積分という分野なんでパス!数学板行ったら〜? とか思った。けど、実は簡単だったりしたら恥ずかしいので黙ってた。
マクロを記録する…って答えじゃダメでつか?
>590 質問が漠然としすぎ。 これに(労せず)答えるには 1.2変量標準正規分布 2.excelの組み込み関数(に1関連のものがあるかどうか) の両方を知っていないと逝けない。 585が何をどこまで知っているのか(知らないのか) わからんのだから591のように様子見だろ。 例えば /* 2変量標準正規分布の積分を求める方法を教えてください。 1変数の場合はNORMSDISTというワークシート関数があるのですが 2変数版が見つかりません。マクロを自分で組まなければいけないようですが どうしたらいいでしょうか。 */ くらい書いてあれば、もし関数があって詳しい人が居たら即答してくれるし、 なくて自作ということになれば「数値積分でググレ」くらいの答えは返ってくるよ。 とにかく585だけじゃVBA自体は触っていても数値積分のアルゴリズムが解らないのか、 マクロって何?なのか、そもそも正規分布からしてよく解らんのか、全然見当つかないもの。
594 :
南斗水鳥拳のレイ :03/02/10 23:48
質問はまさにこんな感じです(コピーしただけ)。 2変量標準正規分布の積分を求める方法を教えてください。 1変数の場合はNORMSDISTというワークシート関数があるのですが 2変数版が見つかりません。マクロを自分で組まなければいけないようですが どうしたらいいでしょうか。
だ〜か〜ら〜
数値積分でググレ
597 :
南斗水鳥拳のレイ :03/02/11 00:15
……だからね、 >VBA自体は触っていても数値積分のアルゴリズムが解らないのか、 >マクロって何?なのか、そもそも正規分布からしてよく解らんのか、全然見当つかないもの。 小学生に説明するのと高校生に説明するのとじゃ教え方からして違うでしょ?
600 :
南斗水鳥拳のレイ :03/02/11 00:30
>>598 アルゴリズムは、わかりやす、マクロもわかりやす。
601 :
南斗水鳥拳のレイ :03/02/11 00:31
>>598 アルゴリズム、マクロもわかります。
あなたの精一杯の高度な説明求む。
>アルゴリズム、マクロもわかります。 それって既に問題解決してないか?
603 :
南斗水鳥拳のレイ :03/02/11 00:40
ごめんなさい、漏れの手に余ります。 頑張って自分で書くか、誰か他の人に当たってください。 すまないねぇ、でかい口叩いておいて……(w
まあここまで厨丸出しだと普通は逃げるわな(藁 おおかた期末のレポート課題を丸投げしたんだろうけど、 出来る限りの努力をするという意志がまるで感じられん。 ソースを全部人に書かせてそのまま提出しようと必死ぽいところが笑えるな。
606 :
南斗水鳥拳のレイ :03/02/11 01:10
>>604 いいえ、とんでもありません。
誠意のあるコメントありがとうございました。
実は、SASでは2重積分していますが、エクセルでどうやってやるのかな
って思ったので・・・。
実際、周りの人は、エクセルしか使わないので、SASでプログラムしても
使ってもらえない→自分の所に、くだらない計算が回ってくる
ってな感じでして・・・。
いや、ほんと、ありがとう。
607 :
南斗水鳥拳のレイ :03/02/11 01:27
>>650 君に一歩遅れて、書き込んだんだけど、
あまりに的外れ!
それから厨房(中学生坊主)って言葉で片付けるのは
ちょっと安易なんじゃない?ふふ・・。
608 :
南斗水鳥拳のレイ :03/02/11 01:28
>実は、SASでは2重積分していますが、エクセルでどうやってやるのかな って思ったので・・・。 最初から書けやゴルァ(゚д゚)
610 :
南斗水鳥拳のレイ :03/02/11 02:12
>>609 まあまあ、落ち着いて!
許して ちょんまげ!
お聞きしたいことがあります。 ブラウザからエクセルにリンクを貼り、クリックするとエクセルを起動させます。 マクロは自動実行でCSVファイルをオープンし、処理して結果を画面に表示させる。 ということをやっているのですが、 ブラウザから起動したエクセルではCSVのオープン処理でエラーとなってしまいます。 ブラウザのウィンドウ内にエクセルとCSVの2画面を開けないためかと思われます。 CSVをオープンさせる方法、またはそれ以外の方法をしっていらっしゃる方がおられましたら 是非お教え下さい。宜しくお願い致します。
612 :
デフォルトの名無しさん :03/02/11 16:12
エクセルマクロから、VBで作った他のアプリケーションの sub を起動したいのですが、 どうやったらできるのか解りません (VB側のアプリは事前に起動している前提です) ご存知の方、よろしくお願いします
他のアプリはオートメーションオブジェクトOtherAppになっているという前提だけど、 Dim obj As OtherApp Set obj = CreateObject("OtherApp.exe") obj.OtherAppSub
ActiveX DLL プロジェクトならば [SeqNumber.cls] Option Explicit Private Number As Long Private Sub Class_Initialize() Number = 0 End Sub Public Property Get NextNumber() As Long Number = Number + 1 NextNumber = Number End Property Public Property Get CurrentNumber() As Long CurrentNumber = Number End Property とか作って、Excel側からは Dim seq As New SeqNumber というように使用すれば良いので CreateObject なんか使わなくて良い。
あ、Excelでは参照設定で設定しておく必要がある。
ありがとうございます 知識不足で、解らない単語が色々でてきたので、 参考にさせてもらいながら、がんばってみます また、つまづいたら教えてください
617 :
デフォルトの名無しさん :03/02/11 23:48
すいません、アドバイス御願いします。 今までexcel2002に市販アドインの体験版を入れて使用していたのですが、 それをアンインストールしたいと思っています。 このアドインは常にツールバー上に表示されています。 アドイン本体を削除すると、excelが立ち上がるたびにロードできないというエラーメッセージが出てきます。 excelの設定でアドインの読み込み情報はどこに記録されているのでしょうか? レジストリを検索したりしてみたのですが見つかりません。 詳しい方教えてください。
sheetAにデータの一覧があります。 sheetAのB列に都道府県のフィールドがあります。 そこで、sheetAにデータを入力後、"東京都"だったら その行を丸ごとsheetBへ、"埼玉県"だったらsheetCへと振り分け たいのです。sheetAのデータをすべて都道府県別に振り分けて いきたいんです。それをコマンドボタンを作ってVBを記述 したいのですが、どのような記述をすればよいですか?(TT) ちなみにボタン一つおすだけで、データの振り分けをしたいので すがなにかいい方法をご教授ください。
620 :
名無しさん@そうだ選挙にいこう :03/02/12 01:23
いい方法?あんたは1つでも方法を見つけたのか? 何も考えずに教えろって書いてんだろ? なつみ、風俗嬢にでも転職しな。
621 :
デフォルトの名無しさん :03/02/12 01:26
どうしてそういう態度なんでしょうねえ(w 解らないからカッカしてるんでしょうか(w
622 :
デフォルトの名無しさん :03/02/12 01:54
>>618 47都道府県のシートが全て揃ってるの?
>>622 すべてはそろっていませんが、半分ぐらいそろっている感じです!
>>617 「ツール(T)」メニューの「アドイン(I)...」は見たか?
625 :
デフォルトの名無しさん :03/02/12 02:21
>>623 無いシートは作成するの?
それとも、データが存在するシートは揃ってる?
>>625 はい、データが存在するシートはすべてそろえてます。
627 :
デフォルトの名無しさん :03/02/12 04:11
628 :
デフォルトの名無しさん :03/02/12 08:11
ActiveXのコントロールをシートに直接貼り付けたいのですが、方法がわかりません。 教えてください、よろしこ。
Set xl = CreateObject("Excel.Application") xl.Visible = True xls.WorkBooks.Open "xxx.xls" とVBScriptで書きました。 マクロ自動実行の Sub auto_open() が走りません。 どうすれば自動実行できるようになりますか?
すいません、できました。失礼しますた(汗
631 :
Excel VBAに関する質問ていうか :03/02/20 17:48
Excel 2000 SR1で複数シートとVBAでシステムを作ってたんですが、 最近Excelを終了しようとしたら落ちるようになりました。 Application.OnTime でタイマーを使うようになってからなのか他の事情か、 原因はわからないのですが、最近になってエラーが。 で、ついに今しがたファイルが開かなくなりました。 ファイルを開くと、開いた後に砂時計になり、エラーでExcelが異常終了します。 このファイルはもう開けないのでしょうか?(T_T) マクロを無効にすればシート自体は開くので、VBAのコード部分が破損したのかなぁ・・・
632 :
Excel VBAに関する質問ていうか解決 :03/02/21 10:53
破損原因はわからないものの、一応解決しました。 マクロを無効にして開けばファイル自体は読み込めるようです。 読み込んだらVB Editor画面ですべてのモジュールをコピーしました。 別のシートをマクロ有効にして読み込もうとするととたんに落ちるので 結局、VBAの初期化に関する部分が腐ってしまったのかなぁ・・・という感じです。
もしもし、個人用マクロブック(XLStartフォルダのxls)とかアドインは確認した? 使っていないならば関係無いが、こいつらは自動的に読み込まれるから、 壊れると何を開いてもエラーになるよ。
634 :
デフォルトの名無しさん :03/02/22 19:13
エクセルシートに表があるとして、データをキーボードで入力します。 しかし、入力値は「コード」や「商品名」などの定まった値で変化の無い 場合があります。ここに間違えて入力するのを防ぐために各セル(行数は 入力データ量によって変化)にドロップダウンリストを表示させ、そこから 選択させたいのです(オートフィルタみたいに)。リストに無い場合は 手入力優先になる必要があります。 まったく対処方法がわかりません。ポインタだけでも教えてください。 お願い致します。
635 :
デフォルトの名無しさん :03/02/22 19:21
636 :
Excel VBAに関する質問ていうか解決 :03/02/22 19:22
>>633 ご指摘ありがとです。XLStartには何も置いてません。
ひと世代前をタネにして、モジュールテキストをコピペして
難を逃れますた。
>>634 ドロップダウン(=リストボックス)を使いたいのであれば、リストボックスを
ベタベタ並べるとメンテナンス性が下がってしまうですよ。
入力のための行とデータが並んだ表をわける(入力ごとにVBAでコピペする)とか
してはいかが?
>>635 うわ、そのほうがはるかにシンプルだった・・・・
>>635 回答して頂き有難うございます。EXCEL2000と2002を使っています。
回答の指示に従いますと、参照セルのデータ以外が入力できません。
>リストに無い場合は手入力優先になる必要があります。
の条件が満たせません。
また、シート全体をクリアするとリストに何も表示されなくなります。
開くエクセルブックに手を加えないようアドインで実現したいのです。
実例とは言わないまでも、こうすればいいのでは?といった指南を
お願いいたします。
639 :
Excel VBAに関する質問ていうか解決 :03/02/22 19:35
よく考えるとセルに表示させたいのは リストボックスではなくてコンボボックスでした。
>>640 >>634 俺のお気に入りの方法で言えば、
Application.OnKey("{ENTER}", 入力チェック関数名)
でEnterキーをフックする方法がいいです。
入力チェック関数名() では、セルに入力されたのが規定のコードかどうかチェックし、
規定外ならエラーを出すとかしてるよ。
>>641 んんん?
それだとエクセルブックに依存しますよね。それは駄目なので
アドインにする必要があるのです。選択する項目はINIファイルに登録して
GetPrivateProfileStringで読み込もうかと考えています。
要はそれをコンボボックスに表示させる方法について悩んでいます。
>Application.OnKey("{ENTER}", 入力チェック関数名)
>でEnterキーをフックする方法がいいです。
矢印キーでセル移動する場合も考えるのでその方法は採用できないのです。
すいませんが。
>>642 あぁ、なるほど。
では識者のコメントを待とう。
644 :
634(957) :03/02/22 20:00
誤)要はそれをコンボボックスに表示させる方法について悩んでいます。 正)要は入力候補のデータが格納されたコンボボックスを、データ入力 されるべきセルに表示させる方法について悩んでいます。
Aの列に単語を書いていきBの列にAの列の単語の組み合わせで 文字列を表示するのはどうしたらよいのでしょうか。
646 :
デフォルトの名無しさん :03/02/25 01:55
Excelシート上ののAの列に単語を書いていきBの列にAの列の単語の 組み合わせで文字列を表示するのはどうしたらよいのでしょうか。 よろしくお願いします。
647 :
デフォルトの名無しさん :03/02/25 01:56
二重カキコすいません。
648 :
デフォルトの名無しさん :03/02/25 02:03
>>645 意味がよくわからん。
もっと具体的に説明してくれ。
>>648 レスありがとうございます。
ワークシート上のAの列に
hoge
excell
vba
とかくとBの列に
hogeexcellvba
hogevbaexcell
excellhogevba
.
.
.
等とすべての組み合わせを表示させたいです。
650 :
デフォルトの名無しさん :03/02/25 03:18
>>649 A列のデータ数は不規則なのか?
2個だったり100個だったりする?
>>650 はい、そのときによって個数はかわります。
個数は Application.CountA で取得できそうだ。 問題は順列生成だな。総個数は Application.Fact で 求められるとして、順列か。うーん面倒くさい。
データの入力規則でプルダウンメニューを作りたいのですが、 最小値が0、最大値に別のシートにあるセルの値を参照するにはどうすればいいのでしょうか?
>>649 一応作ってみたよ。エラーチェックは省いてあるから細かい所は手直ししてね。
Dim count As Integer
Private Sub Perm(i As Integer, n As Integer, p() As Integer)
Dim j As Integer, t As Integer
Dim str As String
If i < n Then
For j = i To n
t = p(i): p(i) = p(j): p(j) = t
Perm i + 1, n, p
t = p(i): p(i) = p(j): p(j) = t
Next
Else
str = ""
For j = 1 To n
str = str + Range("a" + Format(p(j)))
Next
Range("b" + Format(count)) = str
count = count + 1
End If
End Sub
続き Private Sub CommandButton1_Click() Dim i As Integer, j As Integer, k As Integer i = Application.CountA(Range("a1:a65535")) j = Application.Fact(i) ReDim p(j) As Integer For k = 1 To i p(k) = k Next count = 1 Perm 1, i, p End Sub
スマソこちらに差し替えて下さい。 Private Sub CommandButton1_Click() Dim i As Integer, j As Integer i = Application.CountA(Range("a1:a65535")) ReDim p(i) As Integer For j = 1 To i p(j) = j Next count = 1 Perm 1, i, p End Sub
657 :
デフォルトの名無しさん :03/02/26 20:01
VBAでCSVファイルをExcel2002のシートに貼り付けようとして (略)QueryTables.Add(Connection:="TEXT;c:\text.csv"(略) 上のような感じでやってみたのですが 文字化けしてしまって読むことが出来ません。 なにやらExcel2002ではテキストファイルを読ませると デフォでWindowsANSIで読まれてしまうらしく、 文字コードの変換もわからず・・・ 出来る方おりましたら教えてください
>657 sFilePath = "c:\text.csv" sDir = Left(sFilePath, InStrRev(sFilePath, "\") - 1) sFileName = Mid(sFilePath, InStrRev(sFilePath, "\") + 1) sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDir & ";Extended Properties='text;HDR=NO;FMT=Delimited'" ADO参照設定してこんな感じでやるんじゃないの? SQLに使うテーブル名はsFileNameつかってよろしく。
素直にOpenしてからCopyしてPasteSpecialしたらどうだ? Option Explicit Sub CsvPaste(r As Range, FileName As String) Workbooks.Open FileName:=FileName Dim wb As Workbook Set wb = ActiveWorkbook wb.Worksheets(1).UsedRange.Copy r.PasteSpecial _ Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False wb.Close End Sub Sub test() Dim r As Range Set r = ThisWorkbook.Worksheets("Sheet1").Cells(1, 1) CsvPaste r, "text.csv" End Sub
660 :
デフォルトの名無しさん :03/02/27 21:30
>659,658 返答ありがとうございます ADOで行ってみているのですが、 CSVの中に1.12345678901234E-02というような指数が1としか表示されません・・・ ADOの文字列が悪いのでしょうか・・? それ以前にVBAではなくVBでやりたいと思ってやってるのがいけないのかな・・
>それ以前にVBAではなくVBでやりたいと思ってやってるのがいけないのかな・・ それ以前にVBA,VB共に入門書すら読んでないのがいけない。 >CSVの中に1.12345678901234E-02というような指数が1としか表示されません・・・ これ......。中途半端な知識では何の言語を使っても同じ。
662 :
デフォルトの名無しさん :03/02/28 10:51
プロジェクトのロック解除の仕方誰か教えて〜
664 :
デフォルトの名無しさん :03/03/02 18:27
整数型の配列を全て-1で初期化したいのですが、ループを回すしかないのでしょうか? C言語のmemset関数みたいなのないでしょうか?
>>667 そうですか。仕方ないのでループさせます。
御回答ありがとうございました。
>>668 しょっちゅうループ書くのが面倒で見苦しくなるのなら、関数にしちゃえよ。
memsetなんか簡単だろ。
670 :
デフォルトの名無しさん :03/03/03 00:02
あるワークシートをdeleteメソッドで削除しようとすると、 いちいち削除の確認をしてくるのだけど、このダイアログボックスを 出さずにするにはどーしたら良いのでしょうか? おしえてちょーだい!
671 :
デフォルトの名無しさん :03/03/03 00:41
>>670 Application.DisplayAlerts = False
(処理)
Application.DisplayAlerts = True
672 :
デフォルトの名無しさん :03/03/03 00:47
>>671 早速のレスありがとうございます。
うまくいきました。
2ちゃんで、親切受けるのはじめてです。うれじー!!!
673 :
デフォルトの名無しさん :03/03/03 17:44
質問させてくだーさい。 AddLineやAddShapeにて描いたワークシート上の図形を グループ化する良い方法は何でしょう? SelectAllは関係ないほかの図形も選択してしまうので使いたくありません。 よろしくおねがいしまーす。
Dim shps As Shapes Set shps = ThisWorkbook.Worksheets("TEST").Shapes Dim shp1 As Shape Set shp1 = shps.AddLine(10, 10, 110, 110) Dim shp2 As Shape Set shp2 = shps.AddLine(10, 110, 110, 10) Dim sr As ShapeRange Set sr = shps.Range(Array(shp1.Name, shp2.Name)) sr.Group こんな感じでやれば良いはず。
グラフをメタファイル形式で保存するのは無理なんでしょうか? exportではGIFとJPEGのみ?
>>674 わかり易い例をありがとうございます。
なんとなく、わかりました。が、
いくつの図形が描かれるかは、前もってわかりません。
Arrayに動的に引数を与えることが出来るのでしょうか?
また、その方法は?
質問ばかりですいません。
>>676 ヘルプで ReDim ステートメントを引くべし。
674の例を以下の様にredimt使ってやってみましたが、 「アプリケーション定義またはオブジェクト定義のエラー」 となってしまいます。何故なのでしょう。 Dim MyArray() As Variant Dim shps As Shapes Set shps = ThisWorkbook.Worksheets("TEST").Shapes Dim shp1 As Shape Set shp1 = shps.AddLine(10, 10, 110, 110) Dim shp2 As Shape Set shp2 = shps.AddLine(10, 110, 110, 10) ReDim MyArray(2) MyArray(0) = shp1.Name MyArray(1) = shp2.Name Dim sr As ShapeRange Set sr = shps.Range(MyArray) sr.Group なにとぞお助け下さい。
679 :
デフォルトの名無しさん :03/03/08 13:08
× ReDim MyArray(2) ○ ReDim MyArray(1) または > ReDim MyArray(2) > MyArray(0) = shp1.Name > MyArray(1) = shp2.Name この3行を次の1行で MyArray = Array(shp1.Name, shp2.Name)
681 :
デフォルトの名無しさん :03/03/08 15:25
VBAのヘルプの例のコードを実行したら一回目はうまく動くのですが、 2回目に実行するとエラーになります。教えてください。 Set myBar = CommandBars _ .Add(Name:="ユーザー定", Position:=msoBarPopup, Temporary:=False) With myBar .Controls.Add Type:=msoControlButton, ID:=3 .Controls.Add Type:=msoControlComboBox End With myBar.ShowPopup
>681 そもそも同じ名前で追加するのはOKなのか?
Excel97のユーザーフォームでリストボックスやコンボボックスを 使うときにタイトル行を付ける事ができます(ColumnHeads=True) が、シートがソースの時しか機能しません。 値をaddItemやListやColumnで設定したときにタイトル行を表示 するにはどうすればいいか教えてください。
エクセルのVBAで、他の.exeファイルを呼び出すことは出来ますか? マクロを走らせた時にWACOMのPenPlusパーソナルを呼び出したいのですが。
687 :
デフォルトの名無しさん :03/03/12 20:38
教えてください。 フォームウィンドウを移動した時に、残存画面が 残ってしまうんですが、残らないようにする事は出きるのでしょうか?
残らないぞ。OSは何だ? ディスプレイドライバがバグっているのではないか? いっぺん再起動してみてくれ。 それでダメなら、次はディスプレイドライバのバージョンアップだな。
>>688 レスどうもです。
OSはWindows2000です。
もう一つ別のフォームは残らないのですが、
今のところそのフォームだけが、残ってしまいます。
再起動しても駄目でした。
ちなみにWin98の他のPCでも試しましたが同現象です。
ドライバの更新試して見ます。
690 :
デフォルトの名無しさん :03/03/13 10:26
フォームにTextBoxとCommandButtonを張り付けて、 TextBoxに整数を入力した後、Buttonを押して、イベント発生みたいなことをやってます。 んで、イベント部分で、 Dim s As String Dim i As Integer s = TextBox1.Text i = ? とか書いてsを変換してiにIntegerの値を入れたいのですが、 StringをIntegerに変換するにはどうやるのでしょうか? i = CInt(s)では、データ型変換エラーみたいなのが出ました。
691 :
デフォルトの名無しさん :03/03/13 13:51
692 :
デフォルトの名無しさん :03/03/13 13:53
>681 実行前に同じ名前のCommandBarをCommandBarsから削除する必要があります。 For Eachとか使って。
693 :
デフォルトの名無しさん :03/03/13 13:58
>689 688のおっしゃるとおりドライバが怪しい。 ハードウエアアクセラレータを「なし」にしてみるもの手。
694 :
デフォルトの名無しさん :03/03/13 14:02
>690 IsNumeric(s)で数値となりえるか確認して味噌。
696 :
VBA初心者。 :03/03/17 02:22
ヒントを頂きたいのですが、 フォームからファイルを開く操作をしたいのですが、 BVにあるファイルリストボックスみたいな動きをさせる方法はありますか? うまくいきません。 良い方法があればお願いいたします。
FileSystemObject
698 :
VBA初心者。 :03/03/17 23:22
>>697 FileSystemObjectで検索して見ましたが
今のところ良いヒントが見つかりません。
どなたかもう少し詳しくヒントをいただけませんか。
手持ちの書籍では載っていませんし、
ネットで検索しても自分がやりたいことの項目がありませんでした。
エクセルVBAのフォームからwinでのファイルを開くや
保存する時に出てくるドライブ選択窓やファイル選択窓を出したいのです。
よろしくお願いします。
699 :
デフォルトの名無しさん :03/03/18 00:12
700まんこ
>>698 GetOpenFilename では何か都合が悪いのか?
702 :
VBA初心者。 :03/03/18 23:34
>>699 ありがとうございます。探してみます。
>>701 都合が悪いわけではないのですが、フォームから項目を入力して
セルにデーターを落としてシートのみを別名で保存するって言う方法で
見積書を作っているのですが、保存しているシートをフォームから
呼び出すのにファイルリストを出したいのです。
知識が乏しく思うような動きが出来ません。
GetOpenFilenameは何かアクション(ボタンを押すなど)で指定のファイルが
開くってことですよね?
どのファイルを開くかは特に決まっていません。
703 :
VBA初心者。 :03/03/19 00:00
>>701 すみませんでした、GetOpenFilenameって知らなかったのですが
ファイルを開くダイアログボックスが出るのですね。
ありがとうございました。解決しそうです。
がんばります。
>683 分からんので外側にラベルを貼り付けることにした。
あるブックがOPENされているかどうか調べて, 開かれてなかったら開くという処理をしたいのですが, はじめの調べるところのやりかたがわかりません。 どなたか教えてください。
>705 WorkbooksコレクションをNameで比較すればいいんちゃう?
>706 なるほどやってみます。 ありがとうございます。
708 :
デフォルトの名無しさん :03/04/04 00:39
すいません、教えて下さい エクセルでチェックボックスをクッリクすると文字が印字されて、 チェックを消すと文字が消えるマクロの組み方しりませんか?
>708 式で作れ。 =IF(checkboxdata,"文字","")
710 :
デフォルトの名無しさん :03/04/08 13:20
教えてください。 シート上でshiftを押しながら右クリックしたときだけ、ある右クリックメニューを だしたいのですが、shiftを押しているかどうかの判定はどのようにすればできるのでしょう? よろしくお願いします。
711 :
デフォルトの名無しさん :03/04/08 20:07
・・・ 案だけ KeyDownイベントにシフトキーを判定して押されてたら シフト=ON KeyUpイベントにシフトキー判定して 離されてたら シフト=OFF BeforeRightClickのなかで if シフト=ON then ・・・・ endif 変数シフトの定義に注意すれば いけそうだが。
>>712 おまえが社長だったら、おまえの下で働かされている社員が不憫だ(w
盛り上がってまいりました!!
715 :
デフォルトの名無しさん :03/04/09 19:32
710です。
>>711 シートには、KeyDown、KeyUpイベントがないようなのです。
それで、困っています。それとも、あるの?
>>712 答えられない無職ヤローはひきこもってろ。もとい、ひっこんでろ。
>>715 というか、自分もわからないクセに偉そうだな。
718 :
デフォルトの名無しさん :03/04/10 00:45
719 :
デフォルトの名無しさん :03/04/10 07:05
>>715 あ・・・
シートには、keyup とか 無かったみたい・・ スマン
初めから、右クリックのメニューに、
SIFTキーを押したとき用のも表示されるようにしておく・・・
じゃ だめですよね
いい案 浮かばん・・・・
720 :
VBAでメールを送りたい :03/04/10 11:01
特定のセルが特定の条件に達した段階で、メールを送るようなマクロ を書きたいのです。MAPIを使わずにできるでしょうか?いろいろ調 べたんですけど、さっぱりです。本も5冊持ってるんですけど、手が かりをつかめません。ある程度の方向がわかれば自分で調べますので、 教えてくださいませんか?
>>720 cmailっつーメールm送信専用のフリーソフトがあるから、
それ呼び出せばいい
>>720 sendkeyで手動手順を再現させれば出きるかも・・
ただ、メールソフトの起動のタイミングとか かなりむずいです
(フォーカスの移動が・・・)
>>722 さんのフリーソフトは知りませんが、そういうのを起動させるだけ!の方が
現実的かと。
>>710 GetKeyState(nVirtKey)
GetAsyncKeyState(nVirtKey)
あたりのAPIあたりでうまくいくかも。
>>720 "mailto:(メールアドレス)"というアドレスをブラウザで開こうとすると、自動でメーラーが立ち上がる。
これを利用するとか。
725 :
デフォルト名無しさん :03/04/12 15:59
列に空白が存在する場合上の値と同じデータを入れる処理を行いたいと 思って下記のように書いたのですが。 For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1 ' セルが空白だった場合上のセルを今のセルへコピー If Cells(i, 1).Value = "" Then Cells(i - 1, 1).Copy Cells(i, 1) End If Next 空白が1行の場合だと埋めてくれるのですが、2行以上空白が続くと うまくいきません、どうすればうまくいくでしょうか?おながいします
>>725 下から走査すりゃそうなるのが当たり前だろう。
727 :
デフォルト名無しさん :03/04/12 17:14
>>726 なるほど、こりゃ下からって意味だったのか。for文の仕組みも
よくわからずに打ってたよ。サンクス
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●別れさせ工作
あらゆる手段を使ってターゲットを別れさせます!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
その他人生相談からどんなお悩みでも解決いたします!!
直通 090−8505−3086
URL
http://www.h5.dion.ne.jp/~grobal/ メール
[email protected] ■グローバル探偵事務所
>720 BASP21.DLLとかを使う手もあるでよ。 「VBAで」と言えるかどうか疑問だけど。
730 :
excel 290 :03/04/15 18:47
同じ名前のオートシェープがあると、 x = 0 For Each obj In ActiveSheet.DrawingObjects obj.text = cstr(x) x = x + 1 Next 同じ名前の一つ目の図形しか、テキストが変わりません。 なぜでしょうか?
>>730 よくわからんが
こうやって、何回ループしてるか 試して
x = 0
For Each obj In ActiveSheet.DrawingObjects
obj.Text = CStr(x)
x = x + 1
Debug.Print x, CStr(x) 'ここに こうやって
Next
732 :
デフォルトの名無しさん :03/04/15 19:37
733 :
デフォルトの名無しさん :03/04/15 22:20
>>731 ループの回数はOK。なんかねー。VBでいう、同じ名前のボタンが配列みたいな状況なのよ。
ループ中は、
[T1] [T2] [T1] [T2] [T3] なんだけど。
==== この二つのテキストを書き換える方法が知りたい。
734 :
デフォルトの名無しさん :03/04/15 22:37
>>733 DrawingObjects
にカーソルおいてPF1のヘルプは?
コード全部晒してくれないと 試す気にjならんので ゴメソ
735 :
デフォルトの名無しさん :03/04/15 23:02
VBA入ってるけど、VB入れてないのでヘルプファイルは無い。(藁 逆にほかの方法で、オートシェープのTextBoxにアクセスできればそれでも良いのですが… コードはこれ以上晒す必要は無いはず。 ActiveSheets.DrawingObjets("T1").Text = "123456" これで、T1という名前のTextBoxが複数あった場合、 すべてにアクセスする方法が知りたいのですが…
> VBA入ってるけど、VB入れてないのでヘルプファイルは無い。(藁 あんたのセリフ素人臭すぎ怪しすぎ。 VBAのヘルプにのってるでしょ? それにVBのヘルプっていうのはMSDN。VCとかと共通。
>>733 アクセスさえ出来ればいいというならとりあえずこんな感じか。
Set obj = ActiveSheet.DrawingObjects
x = 0
For x = 1 To ActiveSheet.DrawingObjects.Count
obj(x).Text = CStr(x - 1)
Next
obj = ""
>>735 なんとなく
無理っぽい・・ けど わからん
メルくれたら 該当ありそうなとこの HELP抜粋送るが・・
同じ名前がつくの?
そのループ内で .NAMEプロパティを・・・ いや やっぱ わからん
>>737 あー 動きますね(最後の一行はErrだったけど)
0〜数分の textが連番で 入りますね
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●別れさせ工作
あらゆる手段を使ってターゲットを別れさせます!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
その他人生相談からどんなお悩みでも解決いたします!!
直通 090−8505−3086
URL
http://www.h5.dion.ne.jp/~grobal/ メール
[email protected] ■グローバル探偵事務所
,rn
r「l l h. / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 、. !j |
ゝ .f _ |
| | ,r'⌒ ⌒ヽ、. │
http://freehost.kakiko.com/hiroyuki/ ,」 L_ f ,,r' ̄ ̄ヾ. ヽ. │ こんなのあったニダ
ヾー‐' | ゞ‐=H:=‐fー)r、) |
| じ、 ゙iー'・・ー' i.トソ |
\ \. l ; r==i; ,; |' .人_
\ ノリ^ー->==__,..-‐ヘ___
\ ノ ハヽ |_/oヽ__/ /\
\ / / / |.
y' /o O ,l |
名前って具体的に何を指してるのだ? なんか取り違えているいる気がする。 ループ回数が合っているなら、 どのように(どのプロパティを)T1 と名付けているのか分からんが、 1回目のループのT1と次のループのT1は同じ コントロール(オートシェイプ)を 参照しているから、1つしか変わらない 様に見えるのでは?
>ActiveSheets.DrawingObjets("T1").Text = "123456" これで、アクセスできるのなら、 >これで、T1という名前のTextBoxが複数あった場合 "T1"というインデックスのオブジェクト(DrawingObjet) は複数作成することはできない。
>>743 論点が違うと思うのだが。作成出来てるから質問してきてるわけだし。
実際試してみたけど、DrawingObjetsコレクションのNameプロパティに
設定する値はユニークでなくても構わないみたいだよ。
つか手動で名前を付けた描画オブジェクトをコピペで複製すると、
みんな同じ名前になるから試してみなよ。
>>743 はうそ言ってた。ゴメソ。
コピペで複製しても同じ名前にならなかった。
コード内で名前を同じにするとできるね。
でも、これは無理だろな。VBAはコントロール配列
はできない。インデックス名じゃなく、
上にもあるように、インデックス番号で逐一変えていく
しかないね。
746 :
デフォルトの名無しさん :03/04/16 07:46
>>745 T1, T2 を作成。
T1, T2 をShift+Ctrlで同時選択。
コピペ。
で作れます。
コントロール配列の場合、Objectが配列かどうかはどう調べますか?
747 :
excel 290 :03/04/16 10:25
>>745 ですから、インデックス番号で、3番目にアクセスしているのに、1番目が書き換わってしまうんです。
バグですかね?
748 :
excel 290 :03/04/16 11:01
以下のPGの上半分では、Group化したオブジェクトの中身を取得しようとしていますが、 うまく動きません。TextBoxesが無いというメッセージが出ます。 どうすればうまく動きますか? For y = 1 To st.GroupObjects.Count For x = 1 To st.GroupObjects(y).TextBoxes.Count Set shape = st.groupsobjects(y).TextBoxes(x) Debug.Print "Shape " + TypeName(shape) + "/" + shape.Name + "/" + shape.Text For i = 1 To UBound(DICTKEYS) shape.Characters.Text = Replace(shape.Characters.Text, DICTKEYS(i), DICTVALS(i)) Next Next Next For x = 1 To st.TextBoxes.Count Set shape = st.TextBoxes(x) Debug.Print "Shape " + TypeName(shape) + "/" + shape.Name + "/" + shape.Text For i = 1 To UBound(DICTKEYS) shape.Characters.Text = Replace(shape.Characters.Text, DICTKEYS(i), DICTVALS(i)) Next Next
グループ化はまとめて参照出来るところが利点なのだと思うが。 まともにやるならグループ化解除して、処理終了後に再度グループ化。
750 :
excel 290 :03/04/16 15:18
ありがとうございます。 グループ化を解除する方法を教えてください。 また再びグループ化する場合、 含まれていたオブジェクトがどれなのか調べる方法はありますか?
751 :
デフォルトの名無しさん :03/04/16 15:51
> グループ化を解除する方法を教えてください。 Ungroup > また再びグループ化する場合、 > 含まれていたオブジェクトがどれなのか調べる方法はありますか? 面倒なので、グループを別のシートにカット&ペーストしてから作業 すれば? 作業が終わったらまたカット&ペーストで、元のシートに 戻す。
.captionじゃねー?
(^^)
∧_∧ ( ^^ )< ぬるぽ(^^)
730じゃないけどグループ化したオートシェープについて質問。 class hoge にaddshape()でhoge1,hoge2,hoge3……と作った図形をメンバに持たせた上でgroup化しました。 (hoge3は四角形です) debug.print hoge3.TextFrame.Characters.Text で図形にカキコ済みのテキストを表示するのはできたんだけど、 hoge3.TextFrame.Characters.Text ="test" とすると以下のエラーメッセージが出ます。 実行時エラー'1004' Characters クラスの Text プロパティを設定できません。 textframeやcharactersをヘルプで見ると書き込みも出来るはずなのに……どうして?
んで、これを各モジュールに貼り付けると上のエラーが発生。 ---------------------標準モジュール------------------ Sub add_hoge() Dim x As New choge x.create_hoge '図形のグループを生成 x.c_text 'テキスト書き換え(エラー) End Sub ---------------------クラスモジュール----------------- Dim hoge0 As Object Dim hoge1 As Object Dim hoge2 As Object Public Function create_hoge() '二つの図形hoge1とhoge2をグループ化 Dim mys As Object Set mys = ActiveSheet.Shapes Set hoge1 = mys.AddShape(msoShapeIsoscelesTriangle, 0, 0, 45, 45) Set hoge2 = mys.AddShape(msoShapeRectangle, 0, 0, 45, 45) hoge2.Select Selection.Text = "test0" Set hoge0 = mys.Range(Array(hoge1.name, hoge2.name)).Group End Function Public Sub c_text() 'hoge2のテキストを書き換え Debug.Print hoge2.TextFrame.Characters.Text hoge2.TextFrame.Characters.Text = "test1" '←ここでエラー Debug.Print hoge2.TextFrame.Characters.Text End Sub
757 :
デフォルトの名無しさん :03/04/22 22:03
>>755 ぶっちゃけ無理なんじゃないの? 画面上からは確かに出来るけど、
マクロ記録中だと出来なくなるし、上の方の回答にも、バラしてから
やれなんてのがあったし。
調べてみたところによると、VISIOには階層化したオブジェクトの子階層
にアクセス出来る定数があるみたいだ。具体的には
Shapes(1).Shapes(1), visSubSelect←これ
こんな感じで下の階層のシェイプをマウントすると、単独のシェイプと
同じようにアクセス出来るらしい(使った事無いから自信は無いが)。
ご存知の通り、エクセルにはこれに相当するメソッドは無い。
758 :
デフォルトの名無しさん :03/04/23 20:29
シートになにかをコピペで貼り付けられると動き出すマクロってエクセルでできます? 手入力だと動き出さないけどコピペだと動き出すようなもの。
>>758 手動でも動き出す
動いたあとに、手動かコピーか判別できればいいが、
それも多分無理
760 :
デフォルトの名無しさん :03/04/23 22:29
>>759 そうですか。残念。
最低限、シートが書き換えられたかどうかは
Worksheet_Change(...)でやればいいんですよね?
>757 駄目かぁ……情報TNX 結局グループ解除→書き換え→再グループ化で実装してみますた。 Public Property Let hogename(str As String) hoge0.Ungroup hoge2.Select Selection.Characters.Text = str Set hoge0 = Selection.ShapeRange.Regroup End Property そもそもバラした状況でも、一旦hoge2をselectしてからでないとtextを書き換えできなかった罠。 なんか激しく勘違いとかしてないだろうか不安……
>>758 目的(やりたいこと)を書いてくれたら
もう少し、他の手段でも、誰か考えてくれるかも
764 :
デフォルトの名無しさん :03/04/23 23:01
>>763 いや、会社の事務作業なんですけどアンケートみたいなのやってて
エクセルのシートで入力フォームつくって配布しているんです。
各シートに固有な情報を隠しセルに埋め込んで、回収後に
マクロで集計しているんですけど、
人によっては他人の入力したシートをそのまま全コピー&全ペーストしちゃって
隠しセルの情報を壊してしまうわけです。
セルの保護機能も考えたけど、動くマシンとそうじゃないマシンがあるって話も聞いたことあるし
イベントマクロで保護できないかなと考えたわけです。
全コピー&全ペーストをブロックできればな、って考えてます。
765 :
デフォルトの名無しさん :03/04/23 23:07
>>764 情報を隠しセルに埋め込んだりせず、マクロ内に記述すればいいのでは?
シートの関数やデータなんてすぐに破壊されちまうからな。
766 :
デフォルトの名無しさん :03/04/23 23:16
>>765 (レスありがとうございます)
ええ、ただ、配布する各個人毎に入力フォームの内容が少しづつ違うんですよ。
マクロでマクロを書き込めれば話は別なのですが、
VBAの場合できないですよね?
隠しシートも考えたのですが、その情報を参照しているセルがコピペで破壊されたらと考えると
やっぱり「コピペ」自体を防止する方法がないかなと考えております。
>>764 ファイルのプロパティとかは・・・
シート1がアンケートで、シート3が何気に隠し情報とか
>>766 情報を参照しているセルを含むシートを非表示にすればいい。
768は誤爆です。
>>766 エクセルファイル名の末尾にシートを識別するフラグをつける等して
select case で別々のfunctionを呼べばいい。
>>766 そうだ、「貼り付け」をメニューから消せばいいじゃん。
マクロで。
771 :
デフォルトの名無しさん :03/04/23 23:29
>>768 アンケートシート自体が隠し情報を参照していて、
このシートを非表示にしてしまうとまずいのです…
って、そうかぁ!シートの数式で参照させるのじゃなくて
なにか入力があったら Worksheet_Change で内容を非表示シートに
転送すればよいのか!?
う、上手くいきそうです。ありがとうございます!
>>770 え、標準メニューもマクロから消せるのですか!?
「上書き保存」と「終了」以外、全部消せばいい
>>774 まじですか!? カゲキ!!
うーん、ちょっと考えてみようかな…。
ただ、ユーザから「お前のファイル読み込んだら俺のエクセル壊れたんだけど
どうしてくれる!」ってクレーム殺到しそうで怖いなぁ。
>>774 メニューから消しても
右クリックでコピーとかされるんじゃないの?
コメントに設定情報もたせるのはだめ? Excelでしか使えなくなるけど。
accessで モジュールをつかって コマンドボタンとコマンドボタンを線でつなげたいのですが そのやり方キボンヌ というか教えてください おながいします
直線コントロールのプロパティでもいじれば? あまり興味がない題材なので具体例は省くが
あと、ここはExcel(重要) VBAについてというスレなんで念の為
すれ違い すみません
784 :
デフォルトの名無しさん :03/04/24 17:38
ActiveCellの列名を取るにはどうすればよいの? 行はOffsetで取ってこれたんだけど。
>>784 なんのこっちゃ?>行はOffsetで
With ActiveCell
Debug.Print .Row
Debug.Print Left$(.Address(, False), IIf(.Column > 26, 2, 1))
End With
786 :
デフォルトの名無しさん :03/04/24 20:06
>>777 ショットカットキー(Ctrl+C,Ctrl+V)は?
787 :
デフォルトの名無しさん :03/04/25 00:30
ワードアートとかオートシェィプを回転させたいので ThisWorkbookに↓をきったんだけど 図形を変えたら動かなくなってしまった! Shapesの()内の指定ってどうだっけ? Option Explicit Private Sub WorkBook_Open() Dim PauseTime As Date, Start As Date Dim i As Double PauseTime = 0.01 For i = -90 To 0 Step 3 Start = Timer Do While Timer < Start + PauseTime DoEvents Loop ActiveSheet.Shapes(1).ThreeD.RotationX = i Next i End Sub
>>785 まちがった。たまたまActiveCellに行番号が入力されてたので
その値を取ってきてただけだった。
解決しました。スマソ。
790 :
デフォルトの名無しさん :03/04/25 02:38
>>766 シート上にフォームを作るんじゃなくて、シート上にボタンを配置して、
ボタンを押すとアンケートのダイアログを表示するような形にすれば?
ダイアログなら、想定外の操作をされる可能性はかなり減る。
アンケートを集計って、、、 ACCESSでやれよ。
なんでやねん
EXCELでやるって言う発想が出てくること自体がおかしいんだ から言ったって無駄無駄
集計をエクセルでやるという発想自体は普通だろ
久々にVBA使ったんだ。 構造体返す関数を作ったら 「ユーザ定義型はパブリックオブジェクトモジュールで宣言しないとだめぴょん!」 とエクセルに怒られたんだけど、これってクラス使ってオブジェクトで返せってこと? 確かエクセル95の時はOKだったような気がするんだけれどなあ。 いつ頃からこんなんなっちゃったの?
>795 標準モジュールにpublicでユーザ定義書けばいいんでないかい?
また質問させて頂きます。 環境:excel2000 あるクラスにオートシェープへの参照をメンバ(hoge as object)としてもたせています。 hogeが指す図をクリックしたらマクロを実行する、というのをやっててつまづいてしまいました。 下のようにonactionを使用すると、標準モジュールにあるマクロsub1は呼び出せたのですが、 そのクラス自身のメンバメソッドを呼び出す方法が不明です。これって呼び出せるものでしょうか? 駄目な場合、代替手段として標準モジュールのマクロに自分自身 (hogeを持っているクラスのインスタンス、thisポインタ)を渡す事は出来ますか? class_initialize() set hoge = addshape(適当な図形) '図の追加 hoge.onaction = "sub1" 'hogeをクリックするとサブルーチンsub1を呼び出す 'sub1をクラスのメンバにしたい '又はsub1にthisを渡したい
798 :
Beginner's Lack :03/04/27 04:55
コンポボックスを、出力先セルを1行ずつずらしながら貼り付けていくこと、って 出来ますか? 貼り付け先のセルの指定を変数にしたいのですが・・・
>>790 レスサンクスです。
入力項目が300行x36列ありまして
フォームだとグリッドのocxかなにか使うことになってしまいます。
できればシートでいきたいです。
すんません。実はアンケートというよりも数値入力といったほうが
適当だったかもしれません。
>入力項目が300行x36列ありまして これでコピペ不可かよ。殴っていいか?
>798 マクロ記録機能を使えば簡単にわかるけど、コンボボックスを追加するには、 「フォーム」なら Sheet1.DropDowns.Add() 「コントロールツールボックス」なら Sheet1.OLEObjects.Add(); 位置は、セルに対してLeftとかTopプロパティを調べる。 でも、追加したいコンボボックスの数の上限がわかっているなら、 あらかじめ全部をシートに配置して、それの表示・非表示切り 替えたほうが簡単かな。
>800 え? シートの全セルコピー&全ペーストされちゃってるんですが… それで隠しセルの内容が破壊されちゃってるわけです。
>>800 失礼。入力者の労力を考えれば…、ということですね。
それはその通りなんです。殴られちゃってもしかたないです。
だから欲をいえば「シートの全セルコピー&ペースト」だけ防止したいんです。
マクロ的に書けば Worksheet.Cells.PasteSpecial のみ防止というか…
(余計殴られちゃうかな…、あうー)
804 :
質問させてくださいまし :03/04/28 10:49
いくつかのシートを持つブックを作りました @シートごとにボタンと、それにリンクされたマクロがいくつかあります。 Aシートごとにシート保護が設定されているものといないものがあります。 Bメールの送受信を取り扱うため、タイマを使って自動運転をしています。 あるシートをコピペして、新しいシートを作り保護したところ、 シート全体が特定ボタンにリンクされてしまったようで、本来ならボタン上でのみ 指先に変わるはずのマウスカーソルが、シートのどこにあっても指先になってしまいました。 同じ体験&解決した方はいらっしゃいますか? コピペしたバチがあたったのでしょうか?w 最後の手段として、シートをイチから作り直すことは考えていますが、 できれば回避策がないものかご教授いただけるなら、と書き込んでみました。
805 :
デフォルトの名無しさん :03/04/29 17:33
特定のセルに入力したときにイベントを発生させるには、どういうコードを記述すればよいのですか?
806 :
デフォルトの名無しさん :03/04/29 17:57
>>805 ENTER, RETURN をフック、アクティブセルで判断する
807 :
デフォルトの名無しさん :03/04/29 18:33
>>805 普通にWorksheet_Changeに書けばいいじゃん
引数のTargetを見て特定セルかどうか見ればよろし
>806 VBAでプロシージャは使えないだろ。
809 :
デフォルトの名無しさん :03/04/29 20:36
>>807 If文で、TargetとRangeの中身の値を比較する方法ですね。
ありがとうございます。
813 :
デフォルトの名無しさん :03/04/29 21:38
>>808 >>811 やったことないヤツはすっこんでろよ。
実際できてんだから、煽る前に調べろっつーの。カスどもが。
814 :
デフォルトの名無しさん :03/04/29 22:18
webクエリを使って、データを取得するときに、アクセスが混雑してるせいか、 たまに「ページが開けません」みたいなメッセージボックスが出るんだけど、 これを無視する方法知りませんか? DisplayAlerts使ってもやっぱり出てきます。
>806 馬鹿発見(wwwww
>806 簡単にできるのに、わざわざ複雑なことを教えるなよ。
これ以外に「公式」と名のつく本があるの?
しまった、806祭りに乗り遅れた
820 :
デフォルトの名無しさん :03/04/29 23:01
>819
ありがとうございます。いずれにしても入門書ですね。
>>19 が上級者向けと言ってるのが気になります。
>>814 webクエリは使ったこと無いんだけど Connection の QueryTimeout プロパティ
は使えないのか?DAO経由ではないのか?
ヘタすると永遠に返ってこないんだが。
具体的には、タイムアウトを無限にした非同期接続で StillExecuting を見て 自分でタイムアウト処理すれ。 実はやったことは無いが、そういう機能はとりあえず実装されてる。
825 :
デフォルトの名無しさん :03/04/30 10:26
エクセルでshell関数を使ってブラウザのSleipnirを起動させてリンクに飛ばしたいのですが、 方法がいまいちわかりません。 Dim ProcID As Integer ' Run Calculator. ProcID = Shell("C:\Documents and Settings\AAA\My Documents\sleipnir140fb\Sleipnir.exe", AppWinStyle.NormalFocus) ここまでは分かるのですが、その先が全然わかりません。 たとえば、yahooにリンク飛ばすとしたら、どうしたらいいでしょうか?
827 :
デフォルトの名無しさん :03/04/30 14:13
829 :
初心者です。 :03/04/30 22:29
シートにある、楕円の図形位置(縦・横ともに)をVBA上の変数に移送したいのですが、どのようにコーディングすればよいでしょうか、すみませんが誰か教えてください。
830 :
デフォルトの名無しさん :03/04/30 23:30
>>829 Sheet1.Shapes(0).Left
Sheet1.Shapes(0).Top
Sheet1.Shapes(0).Height
Sheet1.Shapes(0).Width
>>825 お前マルチだったか
今頃気付いたよ
損した気分。。。
>>804 にて質問したものです・・・わたしの疑問にどなたか答えてくださいまし・・・(;_;)
833 :
初心者です。 :03/05/01 21:28
>>830 どうもありがとうございました。
早速試してみますね。
>>832 スマン 俺はそんな経験無いので・・・
とりあえずシート保護解除して
指先カーソルのまま右クリック→コントロールのプロパティ→サイズ
残念でし・・・ シートの保護を解除したら、指先は十字に戻ってしまうんですよねぇ。 で、保護中に画面全体がボタン化(どこにマウスカーソルをもっていっても指先のまま) してるので、何のボタンにリンクされてるのかと思ったら、 コピペ元のシート(今は別ファイルになってる)のボタンになってました。
結局新規にシートを追加して、そちらにチマチマとオブジェクトをコピーしたら
>>804 の問題はでなくなりました。
ユーザーさんの誤操作をさけるためにもシート保護を使いたかったもので。
というわけで、自己解決のご報告。
エクセルとは関係ないですが、 word本文の後ろに、マクロで指定したファイルの文書を追加する方法を教えてください。 よろしくお願いします。
838 :
デフォルトの名無しさん :03/05/09 10:09
VBからVBAのThisWorkbookに書かれた関数を呼び出せますか? VBA同士なら大丈夫なのですが… 誰かご存知の方教えてください。
839 :
デフォルトの名無しさん :03/05/09 13:28
(・∀・)呼んだー?
>>806 あんたのレスがネタ(にしてもくだらんが)と判断できない低脳ばかりでしたね。
うぅぅん、ぼくのレスはねー、真性だよ(・∀・) Worksheet_Changeを挙げなかったのはシマタ(・A・)と思ったけどねー。 やったことない人と叩きに走りたい人が盛り上がっちゃったんだねー。
>>838 関数なんぞ自作しろ
一応やり方は教えてやる
下はアークコサインのサンプルだ
参照設定で Microsoft Excel *.0 Object Library のチェックを忘れんな
Sub test()
Const x As Double = 0.5
Dim objApp As Excel.Application
Set objApp = CreateObject("Excel.Application")
With objApp.WorksheetFunction
Debug.Print "XL : " & .Acos(x) * 180 / .Pi
End With
Set objApp = Nothing
Debug.Print "VB : " & (Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)) * 180 / 3.14159265358979
End Sub
844 :
デフォルトの名無しさん :03/05/09 18:00
>>841 やったことないヤツはすっこんでろよ。
実際できてんだから、煽る前に調べろっつーの。カスどもが。
>>843 回答はありがとうございます。
ですが、ちょっと意味が違うんです。
エクセルが数個立ち上がっている状態で、
VBから特定のエクセルだけを落とすといった事をしたかったんです。
それでその特定のエクセルは名前が統一されていないので、
ブックに書き込まれている関数を呼び出して落とせたらなと言う考えなんです。
CallByNameなど試したんですが無理でした。
846 :
名無しさん@そうだ選挙にいこう :03/05/09 23:29
>>845 常駐させて、起動したEXCEL.exeのプロセスIDを取得しておけばいい
847 :
デフォルトの名無しさん :03/05/09 23:34
VBAを上達したいなら、まずはExcelの専門家にならなければ無理だ。
847がいいことを言った。
>>838 Const conFunc = "Test" '呼び出したい関数名
Dim xl As Excel.Workbook
Set xl = GetObject("C:TEMP\TEST.XLS")
MsgBox xl.Application.Run("ThisWorkbook." & conFunc & ")
VBA同士なら大丈夫って意味が判らないのだが、 一応これで呼び出せる。
>>849 レスサンクス
VBA同士ならってのはCallByNameでは呼び出せたということです。
今日はもう寝るので明日試して見ます。
ありがとうございました。
851 :
デフォルトの名無しさん :03/05/10 22:22
ExcelがDDEで用意しているコマンド一覧が知りたいのですがどうすればいいのでしょうか? 今更DDEといった感じなのですが・・・・
852 :
VBA勉強中 :03/05/10 23:31
プログラムが一定時間経過してから動作するようにするにはどうしたらよいでしょう? 例えば、ウイルスの潜伏期間とか。
853 :
デフォルトの名無しさん :03/05/10 23:38
854 :
VBA勉強中 :03/05/10 23:40
プログラムが終了していても、通用しますか?
VBAってタイマー使えたっけ?
856 :
VBA勉強中 :03/05/10 23:44
そういえば、見たことないような。 VBにはあったのに・・・
857 :
デフォルトの名無しさん :03/05/11 00:40
>>855 あるけど、別のアプリにフォーカスが移動したら無効になったと思う。
最近のバージョンのOfficeなら、APIのタイマーが使えるかな。
858 :
VBA勉強中 :03/05/11 00:48
実はですね、俺、潜伏期間のコード手に入れるためにメリッサのソースを手に入れたんですよ。 けど、よく考えたらメリッサって即発病するから犯人がさっさと見つかったんだって事に気づいたんです。 俺は一体どうすれば? お袋の誕生日に自動的にグリーティング・カードが出るようにしたいのに・・・
859 :
デフォルトの名無しさん :03/05/11 00:51
>>858 自宅のパソコン?
ならWindowsの「タスク」使えば。
860 :
VBA勉強中 :03/05/11 00:54
ああ、そうでした!その手があった! けど、わがままだけど、俺はプログラムでやりたい・・・ 家族共有だから、あんま設定変えたくない・・・
862 :
VBA勉強中 :03/05/11 01:15
・・・無理っぽい・・・俺には・・・できない・・・ 俺は負け犬だあああああぁああああぁぁぁぁぁぁぁ!!!(ソリッド・スネーク風に)
863 :
デフォルトの名無しさん :03/05/11 01:17
864 :
VBA勉強中 :03/05/11 01:22
すいません。しかし・・・なかで応対・・・ウーーーン
>>858 その日の起動時に表示させるなら、
プログラム冒頭で年月日を調べて、
現在年月日=指定年月日 なら表示。
それ以外なら何もせずに終了。
で、そのプログラムをスタートアップに
登録しておく。
867 :
VBA勉強中 :03/05/11 01:36
>>865 それしかなさそうですね。どうも、お世話になりました。有難うございます。
>>861 確かに・・・出せるけど・・・ところで、こういうのって「自動」なのかな?
タイマー、VBAで使えるよ。 別アプリにフォーカスが移っても大丈夫。 ただし、Excelが終了したら当然ダメ。
869 :
デフォルトの名無しさん :03/05/11 22:43
初めてエクセルVBA書いて動いたのは良いが、 シート1では動くのだが、シート2ではエラーが出る。 シート1用のマクロを作ってしまったみたいだが、 汎用化するにはどうすればいいのでつか?
>初めてエクセルVBA書いて動いたのは良い 動いてねーじゃねーか。悪りーyo!
871 :
デフォルトの名無しさん :03/05/11 22:49
>>870 シート1では動くんだYO。
入力として、シート1とシート2に同じデータを置いても、
シート2はエラー出ちゃうんだよぅ。
飽くまでシート1のマクロになってしまったようで。厨でスマソ
873 :
デフォルトの名無しさん :03/05/11 23:04
>>872 Sub OrgSort()
Dim hidari As Integer
Dim migi As Integer
Dim haba As Integer
Dim mokuteki As Integer
Dim mokutekiMei As String
Dim situmon As String
Dim taitoru As String
hidari = 1
migi = 1
situmon = "ソートしたい項目を正確に入力してください"
taitoru = "文字列入力"
mokutekiMei = Application.InputBox(Prompt:=situmon, title:=taitoru, Default:="新入会", Type:=2)
Do While Cells(1, hidari) <> ""
haba = 0
Cells(1, hidari).Select
・・・
このCellsで、シート2の場合、エラーが出ます。
Do While Cells(1, hidari) <> "" haba = 0 Debug.Print "現在のhidari=",hidari ’ここ追加 Cells(1, hidari).Select この一行追加して結果教えれ それと、コードはどこに書いているの?
>>873 漏れは、シート1でも、2でも動く・・・・
セルA1が空白でない場合
A1がセレクトされる
sheet1にコード書いてるアフォ
877 :
デフォルトの名無しさん :03/05/12 00:46
>>876 アフォなんて書いてねーで、ちゃんとレスつけてやれよ
879 :
デフォルトの名無しさん :03/05/12 21:27
>>874 すげー亀レスすまそ。別の外回り仕事行ってた。
追加して試したけど、何も変化無かったよ。
そうそう、コードはシート1に書いてる。
これが
>>876 の言うアフォなのかもしれないが
まあ、その通りなんだろうな・・・どうしたら汎用化できるんだYO!?
そうそう、書き漏れたが879=873。 そういや何気なく使ってたDim。もしかして、 javaで言うprivate宣言みたいなもんなのか?
>>880 挿入
標準モジュール
で、そこに書く。
多分、全体をコピーすればいい。
そんで、シート1のは削除
883 :
デフォルトの名無しさん :03/05/15 15:07
age
884 :
Seiroggn :03/05/20 18:19
配列を利用してUserFormにある沢山のTextBoxを配列を使って操作したいのですが 途中で 『オブジェクト変数または With ブロック変数が設定されていません』 と表示されて 止まってしまいます。 何か根本的に間違っていると思うのですが正しい方法を教えてもらえないでしょうか? 宜しくお願いします。 UserForm1のコードに入力↓ ----------------------------------------------------- Sub clear2() Dim TextBox(1 To 16) As Object Dim i As Integer TextBox(1) = TextBox1 '★ここで止まってしまう。 TextBox(2) = TextBox2 TextBox(3) = TextBox3 TextBox(4) = TextBox4 ・ ・ ・ TextBox(16) = TextBox16 For i = 1 To 16 TextBox(i).Value = "" Next End Sub -----------------------------------------------------
>>884 オブジェクト変数が設定されていないなら答えは一つだな
つかそのエラー(Error 91)のヘルプに思いっきり書いてあるわけだが
Set
>>885 >>886 set TextBox(1) = TextBox1
で解決できました。
アドバイスありがとうございました!
しかし、なんでSet文は廃止しなかったのだろうか。 オブジェクトのコピー(ディープ/シャロー問わず)は出来ないよな。 だったら、Setで区別しても意味無いじゃないか。 それとも、俺が知らないだけで、コピーって可能なのか?
889 :
デフォルトの名無しさん :03/05/24 23:38
超初心者(MOUS一般程度)にもかかわらず、それだけで 何でもやらせようとするおじさん達のおかげで、なぜかVBA組むことに…。 申し訳ないんですが、教えてください。 特定のセルなりなんなりにファイル名をいれて、ファイルサーバから 該当ファイルを呼び出してくるようなものって、どうすればいいんでしょう? その後やりたいことはなんとなくできたんですが(でも汎用化しきれてない) それがなんとなくできなくて…。 宜しくお願いします。
890 :
デフォルトの名無しさん :03/05/25 01:40
シート200枚くらいを管理するやつ作ったけど重くて使い物になりまへん(泣)
891 :
デフォルトの名無しさん :03/05/25 01:51
892 :
デフォルトの名無しさん :03/05/25 02:00
>>889 >>特定のセルなりなんなりにファイル名をいれて、ファイルサーバから
>>該当ファイルを呼び出してくるようなものって、どうすればいいんでしょう?
セルからファイル名を読み取る方法がわからないのか、それともファイルの呼び出し方がわからないのか、どっち?
あと、「呼び出してくる」というのは、どういう操作を指してるの?
893 :
デフォルトの名無しさん :03/05/25 02:18
>>892 >セルからファイル名を読み取る
セルの文字列を読み取る。の間違いだろ
894 :
デフォルトの名無しさん :03/05/25 12:25
>>892 、893
わからないのはファイルの呼び出し方です。
呼び出してくるというのは、保存してあるファイルを探してきて
開く、という操作です。
文字列の読み取りはわかりました。
わかりにくい書き方してごめんなさい。
1回の処理件数が多い(100枚前後)ので、ファイルを開くのも
自動化したいと思いました。
よろしくお願いします。
895 :
デフォルトの名無しさん :03/05/25 12:37
日本語がわかりずらいYO!
896 :
デフォルトの名無しさん :03/05/25 12:50
Worksheet.open()したいのか?
897 :
デフォルトの名無しさん :03/05/25 13:03
ファイルを開く 1.目の前にウィンドウを開く 2.ファイルシステムオブジェクトでファイルストリームを開く 3.Worksheetオブジェクトに読み込む 普通は2か3だがあなたは1を指してないか?
898 :
デフォルトの名無しさん :03/05/25 13:25
そもそもこのスレって素人向け?
漏れも偉そうなことはあまり言えないが、少なくとも人に質問する際に、 自分が何をしたいのか、どこで行き詰っているのかぐらいは整理してか ら相談するようにしているぞ。 自分で「わかりにくい書き方してぼめんなさい」と言う前に整理したらどうYO?
900 :
デフォルトの名無しさん :03/05/25 19:12
>>899 それに、自分で調べてやってみて、どうしてもうまくいかずに引っかかる
ところがあって質問、じゃなくて仕事丸投げだもんなぁ…
すみません。 逝ってきます…。
902 :
デフォルトの名無しさん :03/05/26 09:47
98SE上のXL2002-SP2で、「グラハム」って入ったワード書類を 「c:\test.doc」としておいて、以下のコードで文字列置換をしようと すると、おだぶつ、で止まるんですが、なんかヘマしてますかね。 詳しい方、おねがいします。 Delphi4で同じことさせると、うまくいくんですけど・・・ Sub test() Dim oW As New Word.Application Dim oWD As Word.Document oW.Documents.Open FileName:="c:\test.doc" Set oWD = oW.ActiveDocument With oWD.Content.Find .ClearFormatting '<-おだぶつ .Execute findtext:="グラハム", replacewith:="おいスティーブ", Replace:=wdReplaceAll End With oWD.SaveAs FileName:="c:\test2.doc" '別名で保存 oWD.Close oW.Quit Set oWD = Nothing Set oW = Nothing End Sub
ちなみに2K上のXL97だと、動くんですよ。なんでかな。
OfficeXP最初からインストールやり直したら 直ってしまった。スレ汚し、スマソ。
905 :
デフォルトの名無しさん :03/05/26 14:51
質問です。 例としてですが、以下のようにVBAを書いてみました。 ------------------------------------------- i = 1 For x = 0.1 To 0.7 Step 0.1 Cells(i, 1) = x i = i + 1 Next end sub ------------------------------------------- xが0.7になるまで、A列に書き出せ、というような意味だと思います。 ですが、実際に動かしてみると、0.6までしか書き出しません。 試しに、0.7の部分を変えていくつかまわしてみたのですが、結果は以下の通りになりました。 0.5 → 0.4 まで書き出し 0.6 → 0.5 まで書き出し 0.7 → 0.6 まで書き出し 0.8 → 0.8 まで書き出し ←正常に終了? 0.9 → 0.9 まで書き出し このようなことから、0.7以下の場合に何か起こってしまうのかと思ったのですが、 どこか間違い等があるのでしょうか。 よろしくお願い致します。
906 :
デフォルトの名無しさん :03/05/26 15:32
>>905 それはDOSの大昔っから抱えてる、誤差のせいではなかろうか。
ていうか、x の型はなに?
907 :
デフォルトの名無しさん :03/05/26 15:45
>>906 Dim x As Double
Dim i As Integer
としていました。
これは昔からある問題なんですか?
パソコンに疎いもので、ぜんぜん知らなかったです。
908 :
デフォルトの名無しさん :03/05/26 16:16
>>907 Single,Doubleはデータを2進数で格納するので、小数点の扱いがニガテなの。
1は2の0乗、2は2の1乗、3は2は2の1乗+2の0乗、4は2の2乗・・・
でも0.1を正確にあらわせないので、近似値になってしまうの。
だから、0.1に0.1ずつ足せば0.1、0.2、0.3、0.4・・・
となりそうだけど、ちっちゃい誤差が溜まってなかしくなるです。
じゃあどうすればいいかっていうと、例で使われた程度の範囲なら、
Currencyは都合がいいです。小数点以下4桁までしか扱えませんが、
この桁の範囲で計算するぶんには誤差は生じません。
どうしてかっていうと、Currencyは実は見せ掛けの小数というか、
内部では10000倍して整数として扱っているの。
例えば0.0001は、パソコン内部では1として扱い、
小数点の位置だけをずらして最終的に小数にしてるから。
909 :
デフォルトの名無しさん :03/05/26 16:19
×・・・溜まってなかしくなるです ○・・・溜まっておかしくなるです いい気になって書いてるうちにミスりました。 練炭で逝ってきます・・・
910 :
905,907 :03/05/26 16:35
>>906 ,908
ありがとうございます!
この程度の計算では、single,doubleは向いていないみたいですね。
Currencyにしたら計算できました。
これからもよろしくお願い致します。
911 :
デフォルトの名無しさん :03/05/26 16:47
・これからもよろしくお願い致します。 ・これからも、わからないことは調べずに貴方たちに任せます。
912 :
デフォルトの名無しさん :03/05/26 17:06
直接VBAには関係ないのですが、 エクセルファイルが開けなくなってしまいました。 何か対処方法はありませんか? こういう事って良くあるんでしょうか? (XPです) ・作業過程と症状 1.AというエクセルファイルでVBAプログラムしていた。 2.その状態でBというエクセルファイルを開いたらフリーズしてしまった 3.エクセルを強制終了 4.次にAのファイルを開くと、シートの表示はされるが、カーソルが砂時計表示のまま固まってしまう。 (タスクマネージャでみると、エクセルがCPUの98%位を使用したまま) ちなみに、AもBも20M位のファイルです
913 :
デフォルトの名無しさん :03/05/26 17:28
>>910 この程度の計算に向いてないというよりは、昔っから体験してることの
延長線上みたいなもんだよ。
電卓で10÷3×3=とやっても10にならないのとほぼ同じ。
小数点以下に精度を要求する計算でも、下のほうの桁はアテにならないからね。
>>911 こーいうのは調べてもわかりにくいよ。
なんせ本人には理屈の見当がついてないわけだから。
914 :
デフォルトの名無しさん :03/05/26 17:43
>>912 俺も以前似たような質問をしたが放置された。
まずエクセルのセキュリティ設定を中か高に変える。
↓
マクロつきブックを開こうとすれば警告が出るのでマクロを無効にする。
↓
開いたらVBエディタを開いてマクロがクサッてないか確認
↓
別名で保存
>>914 ありがとうございます。
参考にしてみます。
何か、前にも同じ様な現象が起きた気がします。
微妙に信用できないエクセル
916 :
デフォルトの名無しさん :03/05/26 21:06
漏れ的にも今イチ信頼できないエクセル。
バックグラウンドコンパイルに問題があるのではないかと、
保存する前には自分でコンパイルするようにしてみた。
あと、編集を続けてるとMSIME2000が「変換できなくなった」と言ってくることがある。
編集を続けますか?と聞いてくるので当然のように「はい」を選ぶと落ちる。
落ちたら、
>>912 になる確率が高い。
だから、「いいえ」を選ぶようにしてる。
いったいなんなんだか・・・
そもそも『20M』位のブックって・・・そんな、事も無げに。
918 :
デフォルトの名無しさん :03/05/26 22:40
65MBのブックてのもあるぞぃ サッサとAccessに移行しろって感じ。 ・・・そして、Accessでも謎の現象に見舞われる、と。
案外、ESCボタン押したら止まったりして。つまり単にマクロ実行中。
920 :
デフォルトの名無しさん :03/05/27 11:14
>>919 そう思うんだけど、止まったタメシがないんだよなぁ。
あと、何十MBにもなると、再計算に30分(@Athlon1GHz)以上かかったりして鬱。
スクリーンセーバーや壁紙チェンジャーとかのせいで再計算が発生したら
止めようがない(まれに止まってくれるけど)。ただひたすら待つのみ。
数MBになると思われる時点で、Accessを使うよう方針変更すべきなんだな。
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
保守
924 :
デフォルトの名無しさん :03/05/28 20:44
ExcelVBAでシートの各レコード毎にコマンドボタン付けて、それを押したら詳細シート表示。 って感じでシート管理するヴォケみたいな思い付きでを続けてたらあっという間にシート180枚超えました。 Accessと連携してなんとかならないものかと考えましたが、結局、レコードの詳細表示を 保持するのはExcelシートじゃないとダメなんです。詳細表示シートは図とか使ってますし。 何か良い方法ないでしょうか?このままでは来月中にシート開かなくなります。
表示する詳細シートを同じブックに作る必要は無いと思うんだが
>>924 詳細シートのそれぞれを別のブックにして、
コマンドボタンから該当のブックを呼び出せば?
ファイルの数が多くなるけど、
ばかでかいファイルを読み書きするより、
軽くなるのではないかと思います。
10件1Bookくらいに分割する方法はやってみました。 結果、これってカッコ悪くないですか?
無駄に重いブックを作るよりはスマートだろう
929 :
デフォルトの名無しさん :03/05/29 00:09
ここってにちゃんねると思えないほど熱いんだが 次ぎスレ用にVBAに関するQ&A集のテンプレだれか作ってくれ おながい
>>929 ・質問する人は可能な限り具体的に書いてね。
・コード(プログラム)を晒すと、なおヨシ。
・質問を小出しにすると、大抵遠回りになります。
・Excelのバージョン、OSのバージョンも書くとレスが付きやすい。
・回答がなくてもキレないで。
・分かる人はできるだけ回答して下さいませ。
こんなんで、いいんじゃない?
Q&Aは、無理だろ・・・
931 :
デフォルトの名無しさん :03/05/29 01:53
>>929 > 次ぎスレ用に
「俺様用に」と言いたいんだろ?白々しく「次スレ用」なんて言わないでおくれ。
>>930 後、
・書き込む前に推敲してわかりやすい文章に汁。
も追加しておいた方が。
>>924 データをAccessに追い出して、毎回図を生成してはダメなのか?
あ、図=グラフとは限らんか・・・
詳細ボタンを押せばパッとひらく今(想像)よりはレスポンスは落ちるが、
ブックが開くのも速くなるしシート数も減ってスマートになると思うんだが・・・
「テンプレ案」 ・質問する人は可能な限り具体的に書いてね。 ・コード(プログラム)を晒すと、なおヨシ。 ・質問を小出しにすると、大抵遠回りになります。 ・Excelのバージョン、OSのバージョンも書くとレスが付きやすい。 ・回答がなくてもキレないで。 ・分かる人はできるだけ回答して下さいませ。 ・書き込む前に推敲して、回答する人にわかりやすい文章に汁。
題名: OS: EXCELのバージョン: 本文: なんてのを2辺りに張っといて、使ってもらえば?
936 :
デフォルトの名無しさん :03/05/29 19:53
VBA最近始めたけどかなり面白いね! 結構何でもできるし。 これ覚えたらアクセスなんていらなくなりそうだよ。 てか、アクセスの機能のうちでエクセルVBAで実現できないことってあるのか?
937 :
デフォルトの名無しさん :03/05/29 20:12
>>936 いろいろあるが、Excelは65535行までというのが一番いたい。
938 :
デフォルトの名無しさん :03/05/29 20:13
65536だった、スマソ。
939 :
デフォルトの名無しさん :03/05/29 22:49
>>936 ExcelとAccessじゃ、そもそも用途が違うからね。
VBAやってくうちにExcelの限界が見えてくると思うよ。
Accessがいらなくなるって・・・・オマエ・・・・
941 :
デフォルトの名無しさん :03/05/29 23:35
Excelの限界って、具体的にはパフォーマンスのことですか?処理はいくらでも書ける気がします。 原則的に自動マクロを編集する方向でコーディング行うと、間違った方向で結果が出ることはないです。 作業効率UPの基本は「手順改善」「自動化」にあるので、「Excelでこれをやりたい!」と考えるよりも、 「今この手順でやっているが、これを自動で行う」とか考えた方がVBAとして良い結果が得られます。 ExcelVBAやってて助かることは出力を簡単に整形できること。こんなに使える「ツール」はないと思います。 なんでもできるExcelだけど、大量なドキュメントを作成/編集するときはWordのサブ文書等に頼りますが。
942 :
デフォルトの名無しさん :03/05/29 23:41
>VBA最近始めたけど もう手遅れだって......
945 :
デフォルトの名無しさん :03/05/30 01:11
たぶんこの人
>>941 は、数日もしないうちに
また書き込んでくるであろう、疑問符をいっぱい抱えて。
Excelはね、たくさんコード書いてると、ヘンな動きをしだすんだよw
946 :
動画直リン :03/05/30 01:13
コンボボックスの挙動が変です。
Bookオープン時に取得しているのですがクリックすると描画がループします。
なぜでしょうか????????????????->->->->->->-
>>945 教えてください。
948 :
デフォルトの名無しさん :03/05/30 03:36
>>941 なんか違うと思う。
おれもlVBAをかじりたての時はそう思ったけど。
Excelで処理すべき作業なのか、他のアプリで処理すべき作業なのか、
その見極めができるようになったら理解できると思う。
おれも最初は「Excel+VBA」が魔法のツールと錯覚し、何でもExcelで
処理してたな・・・
949 :
デフォルトの名無しさん :03/05/30 06:34
おまいらの職場ではOfficeにちゃんとサービスパック当ててますか? 俺のとこは管理者がまぬけなのか、放置されてます。 おかげでMSのバグ回避用のコードが汚すぎです(号泣
最新のサービスパクてどれだっけか
951 :
デフォルトの名無しさん :03/06/01 23:16
質問です。フォーム上の複数のテキストボックスのExitイベントに 同じプロシージャを実行させるコードを以下のように書きました。 -------------------------------------------------------- Private Sub textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Call サブルーチン(1) End Sub Private Sub textbox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) Call サブルーチン(2) End Sub (以下省略) -------------------------------------------------------- コントロールの数だけイベントプロシージャを記述すれば一応動作 しますが、数が多すぎて(20個あるので)あまりに非効率のような 気がします。このようなコードを一つにすっきりさせることは 可能でしょうか?よろしくお願いします。
952 :
デフォルトの名無しさん :03/06/01 23:56
>951 たしかVBAはコントロール配列を作れなかったから無理
>952 やはりそうですか。 Controls("Textbox" & i) のような擬似コントロール配列も このような場合には使えないし。どうしてVBと共通の仕様に しないのやら・・・
コントロール配列ってなんでつか?なにができるのでつか?
>>954 文字通り、コントロールの配列です。
同じ属性を持つコントロールを配列で管理すれば、コーディングの時に何かと
便利です。
例えばコントロールが10個あった場合、VBAの場合10個全てにユニークな
名前を付ける必要がありますが、VBの場合はコントロールを配列にすることで、
一つの名前で扱うことができます。
これにより、本来10個分のコードを書く手間を省略する事が可能になり、コードの
メンテナンス性が向上します(使い方によっては逆になる場合もある。そのへんの
事情は配列変数と同様)。
同じ属性のコントロールを一元に扱えるということは、イベントもまた一元に扱える
という事で、例えばコントロール配列Aに定義したイベントは、その要素である
A(1)、A(2)…に対しても、同じように作用します。952の回答は、これがVBAでは
出来ないという事を意味しているのです。
VB.NETでは無くなったけどね
957 :
デフォルトの名無しさん :03/06/02 11:13
>>956 へー、じゃぁどうやるの?ってすれ違いかな
>>951 調べてみたところ、ユーザー定義クラスを利用すれば出来ないこともないらしい。
以下テキストボックスが5個の場合の例。
'UserFormのモジュールに書くコード
Option Explicit
Option Base 1
Dim myClass1(5) As New Class1
Private Sub UserForm_Initialize()
Dim myTextbox As New Collection
Dim i As Integer
With myTextbox
.Add Item:=TextBox1
.Add Item:=TextBox2
.Add Item:=TextBox3
.Add Item:=TextBox4
.Add Item:=TextBox5
End With
For i = 1 To 5
Set myClass1(i) = New Class1
With myClass1(i)
.txt = myTextbox(i)
.Index = i
End With
Next
End Sub
'Class1モジュールに書くコード Option Explicit Private WithEvents myTxt As MSForms.TextBox Private idx As Integer Public Property Get txt() As MSForms.TextBox Set txt = myTxt End Property Public Property Let txt(ByVal txtNew As MSForms.TextBox) Set myTxt = txtNew End Property Public Property Get Index() As Integer Index = idx End Property Public Property Let Index(ByVal idxNew As Integer) idx = idxNew End Property Private Sub myTxt_Change() MsgBox "textbox(" & idx & ")を変更しました" End Sub このコードを使うと、テキストボックスを変更した際にChangeイベントが発生し、 メッセージボックスにテキストボックスコレクションのインデックス値が表示される。 ただ自分が試した限りでは、何故かExitイベントが発生しないのだが、原因は 私の力不足により不明です。申し訳ない。
961 :
デフォルトの名無しさん :03/06/02 19:52
Javaでクラスに慣れ親しんだ後に、VBでクラスを組むと気持ち悪い。 中途半端だし。更に、VBAはCollection使わないと凝ったことは何一つできないという罠。 可変長配列の代替としてCollection使うのは良いことだ。可読性UPするしな。
>>959 おお、これなら確かにちゃんと動作しますね。
しかしなぜExitイベントだと動作しないのか・・・謎です。
今までクラスモジュールは触ったことがなかったのですが、
使いこなせれば色々と便利なことができそうですね。
959さん、どうもありがとうございました。
>>963 VB/VBAのクラスはオブジェクト指向のクラスとしては足りない機能がおおいけど、
むしろイベント制御用として割り切って使うこともいいんでは
Excel/VBAでコードを書いてて、ちょいとわからなくなったことがあったので ヘルプを見ようと思って開いたら、すべての項目がなくなってました・・・ これは、再インストール以外に解決策はあるのでしょうか?
>>965 俺だったら真っ先に再インストールするね。
何か事情があるなら無理かも知れんけど。
質問です。 Excel2000で印刷の用紙サイズをB4やB5に設定するとき PageSetup.PageSize に xlPaperB4 または xlPaperB5 と設定しますが、 OKI ML2030N ではエラーが発生します。 マクロの記録で調べたところ、OKI ML2030N では B4/B5の設定値が xlPaperB4 や xlPaperB5 ではなくて 122 と 127 になっていました。 この値はプログラムからはどのようにして調べるのでしょうか?
はじめまして、VBA3日目の初心者です。 ==================== Sub A() End Sub -------------------- Function A ??? End Function ======================= 関数の???ところでエクセルを終了させずにマクロ全体から抜ける方法がわかりません。 今のところ、関数AからBool値をSubに戻して判別してるんですが、 何か便利な関数があるはずだと思うのです。 ヘルプ探したのですが、見つかりませんでした。 もしよろしければおしえていただけませんか?よろしくお願いします。
>>968 Exit Function
ちゃんとヘルプ嫁
どうもです。 いやー、てっきりExit Functionでは関数から抜けるだけだと思ってました。 マクロからも抜けれるんですね。 早速試してみます。
>>968 やっぱだめでした。関数から抜けるだけでした。
探してるものは、いわばFunctionの中でつかえる、Exit Subなんですが。
>>971 End
マクロ全体から抜けるなどという概念がなくてな
>>972 思ったとおりにいけました。どうもありがとうございました。
Range の CopyFromRecordset メソッドで Range のある Worksheet では なくて ActiveSheet の Range の位置の NumberFormatLocal が変わって しまうというバグを見つけたんだが、こんなデカいバグがパッチ当てられて いないほど DAO って使われてないのか?
Sub test() Dim dbnam As String dbnam = ThisWorkbook.FullName & ".dbo" If Dir(dbnam) <> "" Then Kill dbnam Dim db As Database Set db = DBEngine.CreateDatabase(dbnam, dbLangGeneral) Dim table As TableDef Set table = db.CreateTableDef("data") table.Fields.Append table.CreateField("date", dbDate) db.TableDefs.Append table db.Execute "insert into data values ('2003/06/01')" db.Execute "insert into data values ('2003/06/02')" db.Execute "insert into data values ('2003/06/03')" Dim rs As Recordset Set rs = db.OpenRecordset("select * from data") Dim ws As Worksheet Set ws = ActiveSheet Dim wsData As Worksheet Set wsData = ThisWorkbook.Worksheets.Add ws.Activate ws.Cells(1, 1).NumberFormatLocal = "G/標準" ws.Cells(1, 2).NumberFormatLocal = "G/標準" ws.Cells(1, 3).NumberFormatLocal = "G/標準" wsData.Range("a1").CopyFromRecordset rs Application.DisplayAlerts = False wsData.Delete Application.DisplayAlerts = True Debug.Print ws.Cells(1, 1).NumberFormatLocal Debug.Print ws.Cells(1, 1).NumberFormatLocal Debug.Print ws.Cells(1, 1).NumberFormatLocal End Sub
あ、バージョンは97と2000と2002 (10.2614.2625) で確認。 参った・・・一応、CopyFromRecordset の実行中だけ Activate でデータの シートを ActiveSheet にしたら問題は回避できることは確認した。 でも、今まで気付かずに使いまくり・・・
あー確かに。 仕様と言い張るにはちょっと苦しい動作ですね。
なんかね、曜日を求めるプログラムってよくあるじゃないですか でね、俺もちょっとやってみようと思ったんだけどサンプルのソース通りにコーディングしたのにコンパイルできないんですよ ↓のソースってどこが間違ってるんですかねぇ〜 ちなみにエラーメッセージは"Sub または Functionが定義されていません"だって。何のことやら
やべぇ、ソース長すぎて書けないんで分割して書きます
Private Sub CommandButton1_Click() Dim mt(12) As Integer mt(1) = 31: mt(2) = 28: mt(3) = 31: mt(4) = 30 mt(5) = 31: mt(6) = 30: mt(7) = 31: mt(8) = 31 mt(9) = 30: mt(10) = 31: mt(11) = 30: mt(12) = 31 y = Val(TextBox1.Text) m = Val(TextBox.Text) d = Val(TextBox.Text) If (y Mod 4) = 0 And (y Mod 100) <> 0 Or (y Mod 400) = o Then mt(2) = 29 Else mt(2) = 28 End If zure = y + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400
days = 0 For k = 1 To m - 1 days = days + mk(k) Next k week = (zure + days + d - 1) Mod 7 If week = 0 Then TextBox4.Text = "Sunday" ElseIf week = 1 Then TextBox4.Text = "Monday" ElseIf week = 2 Then TextBox4.Text = "Tuesday" ElseIf week = 3 Then TextBox4.Text = "Wednesday" ElseIf week = 4 Then TextBox4.Text = "Thursday" ElseIf week = 5 Then TextBox4.Text = "Friday" ElseIf week = 6 Then TextBox4.Text = "Saturday" Else TextBox4.Text = "Error" End If End Sub
982 :
デフォルトの名無しさん :03/06/09 14:53
>>978 どこでエラーが出ているのかな
オレだったらこんなコードにする。
Private Sub CommandButton1_Click()
Dim strWeekday()
strWeekday = Array("", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat")
If IsDate(Me.TextBox1.Value) = False Then
MsgBox "日付が誤っています。"
Me.TextBox1.SetFocus
Exit Sub
End If
If (Me.TextBox1.Value <> Format(Me.TextBox1.Value, "yyyy/mm/dd")) And _
(Me.TextBox1.Value <> Format(Me.TextBox1.Value, "yyyy/m/d")) Then
MsgBox "日付が誤っています。"
Me.TextBox1.SetFocus
Exit Sub
End If
MsgBox strWeekday(Weekday(Me.TextBox1.Value))
End Sub
983 :
デフォルトの名無しさん :03/06/09 16:05
>>978 日本語のエラーメッセージもわからんのか?
死ねよ
>>984 正論だろ
親切にmkという関数は定義されていませんよと反転付きで教えてくれてるのに
>>985 どこを直せばいいのかきちんと書け
そして死ね
だから反転してるところだって
どう直せばいいのかと聞いてるんだ 死ねよ低脳
>>978 まず、先頭に以下のコードを追加してコンパイルしろ
Option Explicit
990 :
デフォルトの名無しさん :03/06/09 19:06
変数mとdに同じテキストボックスの値を代入したり、 y Mod 400と変数oを比較したり、 突っ込みどころ満載だな、釣りですか?
>>989 コンパイルエラー 修正候補:ステートメントの最後だとよ、どういうことだ?
いい加減なことばっか教えてんじゃねぇよ、死ねよ
てかね、釣りも何も俺は見本通りにソース書いただけなんですよ
文句言うならそいつに言え
さぁ、引き続きサポートしろよ
>>988 じゃあヒントだけ教えてやろう。
"Sub または Functionが定義されていません"というメッセージはまあそのまんまの
意味なんだが、未定義のSubやFunctionを使った覚えがないのにこのエラーが
出るということは、単なるタイプミスの可能性が濃厚だ。
というわけで、上で宣言している配列変数あたりが疑わしい。つかそれだ。
てかOption Explicitって先頭に追加したら赤くなったぞ いい加減なことばっか教えてんじゃねぇよ、死ねよ
てかタイプミスなんてあり得ません。 何万回も確認したけど俺は間違ってないからな てかプログラミング講座気取りのサイトでも間違ったソース載っけてるバカが結構多いからな このソース乗せてる奴もその一人なんだろうな 死ねよ
ここはバカと一緒に1000まで埋めるスレとなりました
てか一年かかってようやく1000かよ とんだ過疎スレだな、死ねよ
俺が1000げっと 死ねよ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。