ExcelのVBAに関する質問スレです
質問前に 【
>>2-3 】 あたりを良く読むこと
前スレ
http://pc11.2ch.net/test/read.cgi/tech/1197448064/ ★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Application』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
とりあえず死兆星おいときますね。 ☆ ☆ ☆ ☆ ☆ ★☆ ☆
4 :
デフォルトの名無しさん :2008/03/12(水) 13:39:54
指定したセル以外の入力を避けたいのですが Range("C3,E3,D5").Select Range("D5").Activate でやると、一応完成するのですが、間違いを消去した時 全てのセルデータまで消えてしまうのですが・・・ どう処理したらいいのでしょう? 質問1っパツ目ではずかしい
間違いを消すときに、間違ったセルだけ消せば?
6 :
デフォルトの名無しさん :2008/03/12(水) 14:20:32
>間違ったセルだけ消せば? これをマクロでしたのです。TEXTBOXを使えば簡単ですけど あえて使わずして仕上げたいです。
・今どういうコードで「間違ったセルを消し」てるのか書け ・TextBoxを使えばどのように簡単になるのか、コードも添えて説明しろ
8 :
デフォルトの名無しさん :2008/03/12(水) 15:22:11
・今どういうコードで「間違ったセルを消し」てるのか書け ただ、DELETEしてるだけ。 ・TextBoxを使えばどのように簡単になるのか、コードも添えて説明しろ TextBox プロパティで順番つけてるだけだよ。
「コード書け」の意味が理解できないのか?
10 :
デフォルトの名無しさん :2008/03/12(水) 16:28:07
Range("C3,E3,D5").Select Range("D5").Activate だけでコード書いてないよ。 TextBoxなら cells(1,1)=textbox1 cells(1,4)=textbox2 cells(2,1)=textbox1 って所かな?あえて書けば・・・
>>10 だーかーらー、
>>6 >>間違ったセルだけ消せば?
>これをマクロでしたのです。
これのコードを書けって言ってるの。
>って所かな?あえて書けば・・・
何がどう簡単になったか説明しろって書いただろ?
>>4 >指定したセル以外の入力を避けたい
これの意味が曖昧だから、ちゃんと説明しろってこった。
つ「シート保護」
13 :
デフォルトの名無しさん :2008/03/12(水) 17:22:49
セルc3の次にセルe3へ入力その後セルd5へ入力またセルc3へ戻る とエンターキーを押すごとにセルの移動が行われる様にしたい(繰り返し) これは、例えば、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Range("C3,E3,D5").Select Range("D5").Activate End Sub で可能。でも、E3に入ったデータのみ修正したい場合C3、D5も消えちゃう これでは、使い物にならい。 コントロールを使用した場合プロパティで順列の設定を指定しまうので いちいちコードを書かなくていいから簡単ってこと。 textbox1の次にtextbox2へってENTER押せば設定した順の勝手にカーソル うごくでしょ。cells(1,3)=textbox1 cells(3,5)=textbox2 とか書けば指定したセルにしか入力されないでしょ? それを、使わないで、セルc3の次にセルe3へ入力その後セルd5へ入力またセルc3へ戻る とエンターキーを押すごとにセルの移動が行われる様にしたい(繰り返し) わかってくれた?
情報小出しは以後ヌルー
マクロで消してないじゃん・・・
Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$C$3" Range("$E$3").Activate Case "$E$3" Range("$D$5").Activate Case "$D$5" Range("$C$3").Activate End Select End Sub 質問がアレすぎるけどな、こういうことか?? シートへの入力も消去もキー入力ということなら。
17 :
デフォルトの名無しさん :2008/03/13(木) 11:53:09
For Each myWS In Worksheets If myWS.name =sh_name Then (シートが存在している処理) Next myWS でシートの存在を調べているのですが、グラフのみがあるシートが引っ掛かりません。 どう書けばよいでしょうか?
18 :
10 :2008/03/13(木) 12:19:51
16さん ありがとう。これがしたっかです。 日本語がわるいのかぁ・・・ 反省します。
>>17 ワークシートを調べる →Worksheets
グラフシートを調べる → Charts
ワークシート、グラフシート両方調べる → Sheets
20 :
デフォルトの名無しさん :2008/03/14(金) 09:21:57
関数を組みたいのですが、 文字列"1","2","3","振1","振2","振3”,"休1","休2","休3"のどれかをセルに入力したのち それぞれを数字6500, 6600, 6700,,,, と処理していき最後は関数SUM()で合計値をだしていきたいのです どういった関数でできるのでしょうか? 例でもあるとうれしいのですが、どなたか分かりますでしょうか? 1,1,1,1,1,0,0, ここに6500x5の合計値 2,2,2,2,2,0,0 ここに6600x5の合計値 振3,3,3,3,3,0 ここに6700x4と7000の合計値 といった具合にセルに入力されています
>>20 それワークシート関数(なんたらLookupとか)で実現できるけど、マクロでやりたいの?
>>21 マクロと関数の違いを理解していないのですが、
実現できれば問題ないです。
IF 1 ELSE 6500 IF 2 ELSE 6600 ... といった感じの関数を組んでいくのでしょうか? もしくは文字列を数字に変換にする関数でもあるのでしょうか?
ワークシート関数でいいなら、シートのどこかに 1 6500 2 6600 3 6700 … という表を作って、合計するセルに =VLOOKUP(A1,$G3:$H11,2)+VLOOKUP(B1,$G3:$H11,2)+・・・ とかすればいい。 A1, B1, …はデータのセル、$G3$H11は上の表のセル範囲。
スレがVBAなので、VBAで解決してみよう
なお、
>>24 のほうが正解だと思われる。
値を入れたいエクセルを開いて、ツール→マクロ→VisualBasicEditor
(たぶん)左上あたりのプロジェクト枠のなかで、
右クリック→挿入→標準モジュール
module1ができるはずなので、 下記を貼付
Public Function MojiChange(moji As String) As Integer
Select Case moji
Case "1": MojiChange = 6500
Case "2": MojiChange = 6600
Case "3": MojiChange = 6700
Case "振1": MojiChange = 6800
Case "振2": MojiChange = 6900
Case "振3": MojiChange = 7000
Case "休1": MojiChange = 7100
Case "休2": MojiChange = 7200
Case "休3": MojiChange = 7300
Case Else: MojiChange = 0
End Select
End Function
ファイル→保存して終了を選ぶ
今度はエクセル側で、 たとえばA1に「1」を入れる。
A2に「=MojiChange(A1)」といれる。
するとA2には6500と入っている。
26 :
デフォルトの名無しさん :2008/03/14(金) 18:27:13
一つのセルの中に複数の値がスペース区切りで並べて書いてあるのですが これを上手く取得する方法はないでしょうか?
split
>>24 lookup()じゃなくて、vlookup()を使う理由は?
# 昼間lookup()版を書き込もうとしたらアクセス制限されてた(:;
30 :
デフォルトの名無しさん :2008/03/14(金) 23:17:45
vlookupのほうが有名だからだろ。
無印lookupはいらない子
32 :
デフォルトの名無しさん :2008/03/15(土) 01:52:35
このスレの住人なら知っていますね、あの糞開発ツールのことを ・自分のプログラムのバグなのかコンパイラのバグなのかわからない ・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している ・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている 糞だけど、政治的な理由で無理やり使わされているんですよね もういい加減、我慢するのはやめませんか? ・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。 ・あの糞開発ツール提供会社には「糞開発ツールは話にならない」と突き放しましょう。 バグレポートなどしてはいけません。改善要求などもってのほかです。 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。 ・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」 なんて話が出たら力強く机を叩き、会議室を出ましょう。 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。 糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
そんなものを使っている会社を辞めないお前も不思議な人間だ。
34 :
デフォルトの名無しさん :2008/03/15(土) 19:21:33
VBAスレなのに、関数で答えを返す謎なスレ。 簡単に関数で解決できても、小難しくVBA自作関数で返してやるのがこのスレの醍醐味だろ?
良回答認定
>>33 コピペにマジレス(´∀`)カコイイ!
38 :
デフォルトの名無しさん :2008/03/17(月) 13:28:51
マクロの登録で、ツール、分析ツール、相関を選択しました。 マクロが作成されましたが、いざ実行してみると〜.XLAファイルが見つかりませんとエラーがでます。 どうすればよいでしょうか?
39 :
デフォルトの名無しさん :2008/03/17(月) 15:35:24
マクロをメニューバーに追加したんですが、グラフ選択時に追加したのが消えてしまいます。 アクティブなグラフに変更を加えるマクロだったので正直使えません、グラフ選択時に消えなくする方法を教えて下さいm(__)m 長文失礼しました
40 :
デフォルトの名無しさん :2008/03/17(月) 21:36:12
41 :
デフォルトの名無しさん :2008/03/17(月) 21:38:39
【ヲタの一日】 彡川三三三ミ 9:00 起床 川出 ::::::⌒ ⌒ヽ 9:05〜9:20 朝食(昨日の残り物) 出川::::::::ー◎-◎-) 9:25〜12:25 溜まっていたギャルゲーを消化 ..川(6|:::::::: ( 。。)) 12:30〜13:00 昼食(レトルトカレー) 出川;;;::∴ ノ 3 ノ 13:05〜16:00 ゲーハー板で妊娠を煽る ノ\_;;;;;;;;;;;;;;;;ノ 16:01〜17:00 半角二次元板でエロ同人誌を漁る ( * ヽー--'ヽ ) 17:05〜17:55 ゲームをやる (∵ ;) ゚ ノヽ ゚ ):) . 18:00〜19:28 アニメを見る (: ・ )--―'⌒ー--`,_) 19:30〜19:58 飯を食いながらアニメを見る (___)ーニ三三ニ-) .20:00〜24:00 ゲーム(FF11) (∴ ー' ̄⌒ヽωニつ 1:02〜3:12 ゲーム(エロゲー) `l ・ . /メ / . 3:14〜3:26 エロ同人誌でオナニー ヽ ∵ /~- /. 3:27〜 就寝 (__)))))_))))) ※風呂に入るのは一週間に一度だけ
MS08-014によって生じる問題とは、Excelで特定のタイプのマクロが実行されたときに、 Excelが正しい数値ではなくゼロを返すというもの。Excel 2003において、株価や在庫量 などのデータを外部ソースからリアルタイムで取得し、それらをExcelの配列にプラグイン しているケースで発生する。
-- After you install security update MS08-014 on a computer that has Microsoft Office Excel 2003 installed, array-entered functions that contain a Visual Basic for Applications (VBA) macro that refers to a Real Time Data source return an incorrect value. The incorrect value is usually 0. -- どこを説明しろと?
44 :
デフォルトの名無しさん :2008/03/17(月) 21:47:59
>>42 >>データを外部ソースからリアルタイムで取得し、それらをExcelの配列にプラグインしているケース
これってRTD関数を使ってる場合ってこと?
そんでVBA上で配列に格納すると発生するってこと??
Offset関数について教えてください。(Xp、オフィス2003) RANGE("A1").Offset(3,0)としたとき、ターゲットはセルA4をさします。 ただ、A2とA3を結合していた場合、ターゲットはA5になります。 Offset関数は結合を無視することって出来ないんですか? 上の例で言えば、間に結合があろうがなかろうがA1を基準として 下に3セル分移動したA4を指定したいんですが・・・ 相対指定はOffsetくらいですよね?
46 :
デフォルトの名無しさん :2008/03/17(月) 23:48:35
>>45 i =1
i = i + 3
RANGE("A" & i)
じゃあだめなのか?
セル値の固定はシートに任せると思ったとおり動かないことがあるので、
モジュール側で指定するようにしてる。
26進数変換モジュールを用意しておくと使い勝手もよくなる。
47 :
デフォルトの名無しさん :2008/03/18(火) 00:12:56
...
右行って下行って左行けばぁ?
49 :
デフォルトの名無しさん :2008/03/18(火) 08:24:08
つまり、結合したりしてるシートにOffset関数は使い物にならないということで?
Office 2000だと、range("A1").offset(3,0)はA4になるな。 仕様が変更されたのかな。
Replaceを使って置換するべき文字列を、変数定義した内容で置換する事は出来ますか?
>>52 あるExcelのシートの文字列の一部を置換したいとします。その文字列を入力のボックス作成、そこを手入力し、置換出来る様にしたいのです。
例えば"犬"を"猫"としたり、"犬"を"馬"と置換出来る様に組みたいです。
携帯なのでソースは別途見せます。
なんかいきなりVBAと謳われる神の言語を使用して ツールを期限付き(超最短)で作るハメになったんだけど これって1日半ぐらいあればマスターできますよね?
できます
>55 ありがとうございます!!
57 :
デフォルトの名無しさん :2008/03/18(火) 23:52:20
VBA初めて半年ぐらいの初心者です セルに挿入されたコメント(セルの右上に赤い三角のでるやつ) にかいてある文章を取得することってできるのでしょうか? 自分で色々ヘルプを見てみたところVBAでコメントの文章の設定はできるようなのですが、 取得する方法が分かりません。 具体的に言うと、ある人が仕事に使う表(約40シート、各シートに20×5セルぐらい)を エクセルに打ち込んだんですが、表の中に何箇所か、セルに値を入れるところを コメントに入れてしまったんです。 セル内におさまらなかったし、コメントだとカーソルをもっていくと長い文章も表示されて 見やすいからだそうですが、その仕事を引きついた自分はやりにくくてしょうがいないので コメントの設定されているセルの値にそのままコメントの文章を入れたいのです。 手作業でやると結構時間がかかりそうな量なのです。 マクロの記録で「コメントの編集→コメント文章のコピー→セルに貼り付け」 をやってみたのですが、コメント文章のコピーの部分が記録されていませんでした 分かる方いたらお願いします。
range1.comment.text
Sub macro() If Cells(1, 1).NoteText <> "" Then Cells(1, 1) = Cells(1, 1).NoteText End If End Sub
60 :
デフォルトの名無しさん :2008/03/19(水) 00:32:21
さっそくの回答ありがとうございます
>>59 さんのnotetextで取得できました・・・
これも試したはずなんですが、今やったら動いたので
なんか別の原因でエラー出てたみたいです
助かりました
>>58 せっかく回答いただいて申し訳ないのですが、うちの環境だと
comment.textはやっぱりエラーになりました
「オブジェクトまたはwithブロックが定義されていません」
とのことです
これも別の原因があるのかな?
ともかくありがとうございます
61 :
デフォルトの名無しさん :2008/03/19(水) 08:47:17
ComboBox1のリストを開いたままCommandButton1をクリックする度に 8行づつ表示したいのですが、難しくて作れません。 誰か助けてちょ。 Dim a As Long On Error Resume Next a = 1 If CommandButton14.Click Then ComboBox1.ListIndex = a a = a + 1 End If CommandButton14.Click まずここだめー そして ComboBox1のリストが閉じちゃう。 ハイ、ダメェ〜 エンタの見すぎですいません
答える気にならんな
63 :
デフォルトの名無しさん :2008/03/19(水) 12:43:54
そこを何とか・・・
コンボボックスって、フォーカスを失っても開きっぱなしにすることできるのか?
エンタの神様って死ぬほどつまらん
それを真似されちゃぁねぇ
>>64 無理じゃないか・
66 :
デフォルトの名無しさん :2008/03/19(水) 13:54:00
ComboBox1.SetFocus も ComboBox1.Valueでも開かないな
ACCESSのフォームとVBAなら DoCmd.GoToControl "コンボボックス名" SendKeys "%{down}" , true で開くけれどな
セルをセレクトせずに、仮想セレクトによって、オフセットを使うことは 可能でしょうか。
仮想セレクトって何?
>>69 Sub ppp()
Dim i As Byte
Dim hoge() As Byte
For i = 1 To 5
ReDim Preserve hoge(i)
Range("A" & i).Select: hoge(i) = Selection.Value
ActiveCell.Offset(0, 1).Value = "済"
Next i
End Sub
offsetを使いたい場合、上みたいにいちいちセレクト
しなくてはいかんのでしょうか・・ということなのですが。
hoge(i) = Range("A" & i).Valueで値をとって、そこから、
オフセットでセル移動をすることは出来ないですか?
基本的に、selectは必要ないと思っておいて、さほど間違いではない。 (1) hoge(i) = Range("A" & i).value Range("A" & i).Offset(0, 1).Value = "済" (1') with range("A" & i) hoge(i) = .value .offset(0, 1).value = "済" end with (2) hoge(i) = Range("A" & i).value Range("A" & i + 1).Value = "済"
>>71 あ、そういうことが出来るんですか。
ありがとうございます。早速試します。
必要ないというか、値を取得するだけなのに、そのためにセルのSelectやActivateをする ってのはダメプログラムの良い証拠
74 :
デフォルトの名無しさん :2008/03/20(木) 01:22:17
質問です、行番号を変数redord_lineに取得する スタート列変数 start ゴール列変数 end 上記の3つの変数を使って指定したレコード範囲だけ色を変更することは できるのでしょうか?色は何色でもいいです。
できます
Range(Cells(Row1,Col1),Cells(Row2,Col2))..Interior.Color = COLORREF
すいません、関数の引数にString型の配列を渡しているのですが 型が一致しませんとでてしまします。原因がわからないので教えてください。 Dim hogehoge(999) As String '関数呼び出し method(hogehoge) --------------------------------------------- '関数実体 Function method(hogehoge() As String)
あれ?ここって全然ひといない?
79 :
デフォルトの名無しさん :2008/03/20(木) 12:16:15
質問はあげで
80 :
デフォルトの名無しさん :2008/03/20(木) 12:39:16
Function test() Dim hogehoge(999) As String '関数呼び出し Call method(hogehoge) End Function Function method(hogehoge() As String) '関数実体 MsgBox UBound(hogehoge()) ' End Function
81 :
77 :2008/03/20(木) 13:20:50
>80 あざーす。 エラーは回避できたんだけどなぜCallをつけると エラーがでなくなったのかという根本的な原因がよくわからなかったんでありますが なぜかわかります?データ型の不一致っていうと根本的に 構文の使い方そのものが間違ってるイメージがあるんですが・・ Callステートメントについて少し調べたんだけど このステートメントの役割は関数の呼び出しを明示的に宣言しているのと 参照渡しと値渡しの使い分けをこっちでしなくて済むってことらしいんですが
Dim hogehoge(999) As String '関数呼び出し method(hogehoge) --------------------------------------------- '関数実体 sub method(hogehoge() As String)
トリビア 明示的という日本語は存在しない
そんなしょうもねぇ揚げ足とるくらいなら糞して寝てろや・・・
85 :
デフォルトの名無しさん :2008/03/20(木) 17:48:37
普通に戻り値だと strTEXT = method(hogehoge) 実行したいだけだと call method(hogehoge) と使ってきたので、なぜと言われても困るなぁ…
要は戻り値がないメソッドを呼ぶときは 明示的にCallステートメントをメソッド名の前に付けなくてはならないという 暗黙の了解がVBAにはあるわけだ。あざーす
言葉は生きてて、時代などを反映して生まれては消える。 広辞苑か何かに追加されてないといけないのか?
89 :
デフォルトの名無しさん :2008/03/20(木) 18:38:11
>>86 VBAは初めて?
普段は何で書いてるの?
>89 ヒミツのアッコちゃん
ネタだと思ったが ヒミツのアッコちゃん っつー言語は本当にあるんだな 織田信長の乗りだな
92 :
デフォルトの名無しさん :2008/03/20(木) 21:32:16
method(hogehoge)だとhogehogeに()をつけてからmethodに渡すと解釈するからじゃなくて? もしそうなら、methodと括弧の間に空白が置かれていると思うし、method hogehogeで呼べるはずってことだけど。
日本語でおk
95 :
デフォルトの名無しさん :2008/03/20(木) 23:17:53
日本語だとVBAが走りません
メソッド(ほげほげ)
漏れは括弧を付けて呼びたいのに 勝手に括弧を消されるのが気に入らない
かっこわるい
99 :
デフォルトの名無しさん :2008/03/21(金) 08:32:13 BE:168148962-2BP(380)
valueやformulaはコピ〜されるのですが Numberformat がコピ〜されません なにが悪いのでしょう? With oThisSheet .Rows(p_row + cnt).Value = .Rows(p_eval_row + 1).Value .Rows(p_row + cnt).FormulaR1C1 = .Rows(p_eval_row + 1).FormulaR1C1 .Rows(p_row + cnt).NumberFormat = .Rows(p_eval_row + 1).NumberFormat .Rows(p_row + cnt).FormulaR1C1Local = .Rows(p_eval_row + 1).FormulaR1C1Local .Rows(p_row + cnt).NumberFormatLocal = .Rows(p_eval_row + 1).NumberFormatLocal End With
100 :
デフォルトの名無しさん :2008/03/21(金) 12:11:13
dim name as string name=range("a1") if name=textbox1 then msgbox("有") end if このtextbox1の入力 大文字 小文字でも 認識させたいのですが どう処理したらいいのでしょか? 例えば range("a1")のデータが a0001 textbox1の入力がA0001 この場合もmsgbox(”有”)と拾ってもらいたいのですが・・・
>>100 なんとなく違う回避方法もある気がするが、
StrConv
で、小文字に統一してから比較する
102 :
デフォルトの名無しさん :2008/03/21(金) 12:37:55
StrConv の使い方は フォ-マットですか? それとも、dim name as StrConv と書くのでしょか?
ヘルプ読め
>>100 if name=textbox1 then
→If StrComp(name, textbox1, vbTextCompare) = 0 then
ところで、msgboxの()は必要なの?
msgbox("変数同士は大文字小文字関係なく比較するのだが、" & vbnewline & _ "textboxは厳密に判定するのか?") ' 実際にtextboxを配置してみての実験はしていない
if lcase(name) = lcase(textbox1.text) then でいいんじゃあるまいか。
107 :
デフォルトの名無しさん :2008/03/21(金) 14:56:57
100です。皆様ありがと御座います。 本当はmsgbox()のところは、分かりやすく質問させてもらうため 簡単に仮に置いただけです。 本当は FOR EACH と組み合わせて、膨大な数あるデーターの中から 対象データを抜き出したいのです。 今のコードは下記の様に書いてるのですが、 Dim name As String name = textbox1.text Dim 範囲, 名前 Set 範囲 = Range("a1:z10000") For Each 名前 In 範囲 If 名前.Value = name Then 名前.Select end if 全てがそろってないと拾ってくれず、半分手作業状態で困ってました。 一応、上記コードでやって見ましたが、for each とうまくかみ合いません 再び、ご教授お願いします。
最初からやりたいことを書きましょう。 dim 範囲 as range, 名前 as range set 範囲 = range("a1:z10000") set 名前 = 範囲.find(textbox1.text, lookat:=xlwhole) if not 名前 is nothing then 名前.select end if
109 :
デフォルトの名無しさん :2008/03/21(金) 15:57:09
大文字と小文字全て一致してないと、拾ってくれません。 もうちょっと、いじくってみます。
110 :
デフォルトの名無しさん :2008/03/21(金) 16:33:11
原因が分かりました。 半角の小文字aと全角の小文字aの違いが有ると拾わないみたいです。
永久ループ
トリビア 明示はサ変名詞なので的が付く対象ではない したがって明示的というのは日本語風の言語使用方法に過ぎない
>>113 なぜサ変名詞に的がついてはいけないの?
115 :
デフォルトの名無しさん :2008/03/21(金) 23:06:23
VBAでオラクルのテーブル読めますか?
よんだことあるけどしるか!ってかんじ
117 :
デフォルトの名無しさん :2008/03/22(土) 00:37:29
>>115 excelからやると結構面倒
その辺になるとACCESSのほうがいいかも。
ODBC経由でオラクルのテーブルをリンクできるようにしてから、openrecordsetすれば簡単
oo4oってもうないんだっけか
Oracleに接続するぐらい別に面倒じゃない VBSからでも使える程度のよくあるケース
VBAってさぁ、ソース丸見えなんだけどさ見えなくできないの?
パスワードをかければ、カジュアルなプロテクトはできる。 ただし、はずし方もググればすぐにわかるんだけどね・・・
122 :
デフォルトの名無しさん :2008/03/22(土) 15:59:13
当方環境 【OS】WinXP Home 【バージョン】Excel2002 質問させて頂きます。 数あるレコードの中から番号を選択して、内容を反映させたデータ閲覧用フォーム2を表示させています。 画面で見るだけではなくそれを印刷に流用できればと考えましたので、用紙サイズをA4・印刷方向を横に設定する以下の記述を追加しました。 Private Sub CommandButton3_Click() UserForm2.PrintForm Printer.Orientation = vbPRORLandscape Printer.PaperSize = vbPRPSA4 End Sub 実行すると印刷はされるものの、A4縦で印刷されてしまいました。 A4横に設定するには、どのように記述すればよろしいのでしょうか? ご存知の方いらっしゃいましたら、宜しくご教示お願いします。
ググッたらこんな使い方してたみたいだけど? Forms("フォーム名").Printer.Orientation = acPRORLandscape それかプリンターの設定で縦になってるから云々とか
124 :
デフォルトの名無しさん :2008/03/23(日) 01:50:42
1ヶ月の超初心者です、教えて下さい。 条件分岐でそれぞれの製品(4製品)が5000以上になったらOKになるようにしたいのですが どう書けばいいのでしょうか?それぞれの時の書き方が分かりません。D4:F7 は範囲です。 宜しくお願いします。 If Range("d4:f7").Value >= 5000 Then msgbox"ok" Selection.Value = "ok" Else Selection.Value = "no"
質問の内容がよくわからない。4製品?何に対しての? 5000以上っていうのはD4:F7全ての合計なのか 1個1個のセルの値が5000以上なのかなど
126 :
デフォルトの名無しさん :2008/03/23(日) 02:53:39
4製品というのは例えばストーブ、掃除機、時計、テレビで 1個1個のセルの値が5000以上になるものです。合計は全く関係ありません。 4製品の全ての値が5000(円)以上になっているものに対してOKになるようにしたいのですが。 説明が下手ですみません。
D4:F7って9セルあるけど?4製品?
9セルじゃなくて12セルか
129 :
デフォルトの名無しさん :2008/03/23(日) 03:16:31
すみません。金額の範囲はC4:F7でした。16セルです。
これでおk? '対象のワークシートを変数wkに格納 Set wk = Worksheets("Sheet1") '対象のワークシートの範囲の開始("C4")から終了("F7")までを変数currentCellにセットしてループ For Each currentCell In wk.Range("C4:F7") '対象のセルの値が5000以上だった場合 If currentCell.Value >= 5000 Then currentCell.Value = "ok" End If Next currentCell
131 :
デフォルトの名無しさん :2008/03/23(日) 04:11:38
ご親切にどうもありがとうございました。
ちょっとスレ違いかもしれませんが、教えてください。 以下のようにマクロを使わず、セルに入ってるデータをセルの位置として 指定して計算させたいのですが可能でしょうか? SUM(A1のデータ:A2のデータ) 例えば、以下のようにデータが入力されているとき、 A1のセルに"B1" A2のセルに"B10" マクロを使わずSUM(B1:B10)が行われるようにするにはどうすればよいでしょうか?
indirect()
Excelを他のプログラムからCreateObjectして操作するときに、 そのEcelのオブジェクトのApplicationからメッセージボックスを 表示するようなことはできますか?Excelにマクロを定義しといて 呼び出すという方法じゃなくて、直接メッセージを表示するような ことがやりたいです。
できる
そのためにわざわざExcel使うか?
138 :
デフォルトの名無しさん :2008/03/26(水) 21:19:57
質問です。 VBAの処理のみでAccessに依存することなく、Accessのデータテーブルから エクセルのシートにデータ内容をExportしたり、エクセルのシートの内容をデータベースに Importすることはできるのでしょうか?
>Accessに依存することなく、Accessのデータテーブルから ???
>>136 どのオブジェクトの何というメソッドを使うのか教えていただけないでしょうか。
141 :
デフォルトの名無しさん :2008/03/26(水) 23:59:32
138です。 Accessを使ってシートにデータをExportをしますが、Accessは使わずにVBAの 機能のみでシートにデータを取り込みたいです。
142 :
デフォルトの名無しさん :2008/03/27(木) 00:16:40
excelのvbaだけでは無理
143 :
デフォルトの名無しさん :2008/03/27(木) 00:39:27
質問です。 WindowsXP Excel2000を使っています。 Excel VBAで、画像ファイル(.jpgとか.tifとか)をビューアなどで開かず、 直接印刷する方法を教えてください。 単純に印刷するだけならシェルを使って何とかなったのですが、 用紙サイズや向きの指定をしたく、その方法がまったくわかりません。 よろしくおねがいします
>>138 >>141 ADOとかDAOを使えばそんな感じの事はできる
インポート/エクスポートとはちょっと違うけど
セルをマウスでセレクトして外側は太い罫線、中は細い罫線をひくというような 共通で使えるVBAを作ったのでエクセルを開くたびに常にそのVBAを読み込みたいです。 現在は***.vbaファイルを保存しておき、そこからxlaファイルにしてそれをアドオンでエクセル起動時に読ませています。 これだとVBAを修正するときは、 新規でエクセルを立ち上げ ↓ VBEで***.vbaを読み込み ↓ 編集後別名のxlaファイルに保存(同一ファイルはエクセル起動時に開かれるのでさわれない為) ↓ エクセルを閉じ、作ったxlaファイルを設定しているxlaファイルに置き換え と面倒な事になっています。※xlaファイルはダイレクトに編集できないようだ みなさんは作ったVBAをどのように管理していますか?
つ個人用マクロブック
147 :
デフォルトの名無しさん :2008/03/27(木) 18:33:14
148 :
147 :2008/03/27(木) 20:55:55
ちなみに OLE DBプロバイダを使用して あるExcelファイルのシートのデータを 新規シートへコピーするのをやろうとしてます。
149 :
デフォルトの名無しさん :2008/03/27(木) 21:06:00
>>144 さん
ADOを調べて
public sub toridasi()
Dim cnn as NEW ADODB.Connection
Dim rs As NEW ADODB.Recordset
set cnn = NEW ADODB.Connnection
cnn.Connection String = _
略
略
cnn.Open
set rs.Open Source = 略
といった感じでやったらできました。
質問なのですが今度はデータベースから取り込むのではなく、
Excelのシートの内容をデータベースに書き込むにはどうしたらいいですか?
151 :
デフォルトの名無しさん :2008/03/27(木) 23:00:59
指定フォルダ内の複数ファイルに対して 文字列の置換処理をしたいのですが どのように書けばいいのでしょうか?
ファイル開く→置換
153 :
デフォルトの名無しさん :2008/03/27(木) 23:11:07
>>150 さん
このサイトは見たことがありますが参考になりませんでした。
154 :
デフォルトの名無しさん :2008/03/28(金) 00:43:16
>>153 そこに書いてあることが理解できない段階なら、
まじめにVBAの本を買って、勉強したほうがいいんじゃないかなと思う。
>>153 DAOで、試験的にやってみました。
あらかじめ、TEST.mdbの中に「受注」テーブルがある場合です。
ワークシート「受注」の4行目から9行目までを新規レコードに追加します。
Sub Data_Export()
Dim WS As Worksheet, r As Long
Dim db As Database, rs As DAO.Recordset
Set WS = Worksheets("受注")
Set db = OpenDatabase(ThisWorkbook.Path & "\TEST.mdb")
Set rs = db.OpenRecordset(Name:="受注", Type:=dbOpenDynaset)
For r = 4 To 9
With rs
.AddNew
.Fields("日付").Value = WS.Cells(r, 2).Value
.Fields("顧客名").Value = WS.Cells(r, 3).Value
.Fields("注文番号").Value = WS.Cells(r, 4).Value
.Fields("品名").Value = WS.Cells(r, 5).Value
.Fields("単価").Value = WS.Cells(r, 6).Value
.Fields("数量").Value = WS.Cells(r, 7).Value
.Update
End With
Next r
db.Close
End Sub
参考になればよいですが。
156 :
155 :2008/03/28(金) 04:48:08
ちょっと修正 Next r の次から --------------------------- rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub ---------------------------
157 :
145 :2008/03/28(金) 10:03:57
>>146 ありがとうございます。
個人用マクロ調べてみました。
これだと下記にファイルを置かれてしまうようなのですが、
管理するマクロファイルは任意の場所に置いて管理したいです。
C:\Program Files\Microsoft Office\Office\XLStart
何か方法はありますでしょうか。
158 :
デフォルトの名無しさん :2008/03/28(金) 18:33:56
>>157 俺は
ツールバーにマクロのコマンド作る
159 :
135 :2008/03/28(金) 23:15:33
135なのですが・・・結局できないわけですか・・・。
余裕でできる
161 :
デフォルトの名無しさん :2008/03/29(土) 00:25:20
application.assistant.doalert or 余裕 application.executeexcel4macro "alert(...)" or さらに余裕 application.executeexcel4macro "call(""user32"",""messagebox"",..." or さらにさらに余裕 ...
163 :
デフォルトの名無しさん :2008/03/29(土) 12:35:12
>>135 もっと何をしたいのか具体例を挙げてくれないと
出来るとしか答えられん。
166 :
デフォルトの名無しさん :2008/03/30(日) 19:16:39
OS WindowsXP Excel 97 で、 a1.a2.a3.….an を an,a1.….a(n-1) と並べ替えるにはどうしたらいいんでしょうか。 a1〜anは英数字、カタカナ、漢字です。 よろしくお願いします
みすったorz anをa1のセルに移動(insert)するだけでいいんじゃないのか? ってかXPでなんで97なんだ?
エスパーさん、出番ですよ
vbaじゃなくて並び替えですることだろ
手早いレスありがとうございます。
>>168 一つのセルの中に「.」で区切られた状態で入っているので・・
97なのはwin95のPCで読めるようにしてたのかと。。
>>170 どのようにすればいいんでしょうか
>>171 それは本当にVBAでやらなきゃならんことなのか?
後ろから「,」を検索してその位置以降の文字列を前に持ってくるだけだろ?
Excelの関数で事足りると思うのだが?
>>172 並び替え以前は全て「.」で区切られているので・・
またデータが大量にあるためマクロで処理したいです。
>>173 1.関数で別シートに写像
2.シート全体を選択してコピー→値の貼り付け
175 :
デフォルトの名無しさん :2008/03/30(日) 23:36:48
>>166 あ.い.う.え.お
と並んでいるものを、
お.あ.い.う.え
と並べたいのか?
お.え.う.い.あ
と並べたいと言う意図だとan,a1.….a(n-1) はおかしいし・・・
意味が分からん。
たくさんのcell内のデータを並びかえるのだから 自前でsort関数つくるのがいいだろ
177 :
デフォルトの名無しさん :2008/03/30(日) 23:46:51
>>175 俺も意味が判らんかったが、そういう意味で解釈すると、こうかな?
Function test()
Dim LastStr As String
Dim maxy As Long
maxy = 5
LastStr = Range("A" & maxy)
For i = maxy To 2 Step -1
Range("A" & i) = Range("A" & i - 1)
Next
Range("A1") = LastStr
End Function
178 :
デフォルトの名無しさん :2008/03/30(日) 23:48:43
>>177 並べ替えたいものは「1つのフィールドに入っている」んじゃないか?
179 :
デフォルトの名無しさん :2008/03/31(月) 00:01:58
>>178 そういう意味?
ならこれでどうだ?
Function test()
Dim baseText As String
Dim KekkaText As String
Dim varStr() As Variant
Dim i1 As Long, i2 As Long
Dim maxy As Long
'
baseText = "あいうえお.aiueo.アイウエオ.アイうえオ.aiウエお"
i2 = 0
'
ReDim Preserve varStr(i2) As Variant
For i1 = 1 To Len(baseText)
If Mid(baseText, i1, 1) = "." Then
i2 = i2 + 1
ReDim Preserve varStr(i2) As Variant
Else
varStr(i2) = varStr(i2) & Mid(baseText, i1, 1)
End If
Next
'
KekkaText = varStr(UBound(varStr))
For i1 = 0 To (UBound(varStr) - 1)
KekkaText = KekkaText & "." & varStr(i1)
Next
'
MsgBox (KekkaText)
End Function
180 :
デフォルトの名無しさん :2008/03/31(月) 00:21:21
いいんじゃね? あとは自作関数化すれば何セルあっても動作するするだろ それくらいは自分でなんとかすればよし、というところか。
181 :
166 :2008/03/31(月) 00:39:56
>>174 どうもです
>>175 あ.い.う.え.お
と並んでいるものを、
お,あ.い.う.え
です。 「お」の後がコンマになってます。
>>177-180 ありがとうございます。
おきてからやってみます
182 :
179 :2008/03/31(月) 00:48:02
>>181 おの後ろはカンマにしたかったのか。
それは実装できてないわ。
まぁ、ドットで区切って、並び替えて、再結合は実現しているので、
あとは別に苦労しないだろ。
Sub foo(r As Range) Dim cell As Range Dim pos As Long Dim buf1 As String, buf2 As String For Each cell In r pos = InStrRev(cell.Value, ".") If pos > 0 Then buf1 = Right$(cell.Value, Len(cell.Value) - pos) buf2 = Left$(cell.Value, Len(cell.Value) - Len(buf1) - 1) cell.Value = buf1 & "," & buf2 End If Next End Sub Sub bar() foo Range("A1:A10") End Sub
行頭から半角5文字目の空白を;に変えたい
185 :
デフォルトの名無しさん :2008/03/31(月) 08:11:53
>>179 なんだその吐き気がするコードは。
Excel97にはSplitすらないのか?
仮に無いとしても、
>>172 で十分だろ。
いちいち"."で分割して結合する意味がわからん
>>186 97にはsplitもなければInstrRevもない。
Replaceもなかったりする
意味なんてものはその職場の風習によるだろ。
あー、糞コードを量産する職場だったら、
>>179 を見ても違和感がないという意味か
instrくらいあるだろ
>>166 で意味がわからんって、どんだけ読解力無いんだよ・・・
197 :
166 :2008/03/31(月) 20:28:10
>>182 上手くいきました。 ありがとうございます。
>>他住人の方
ありがとうございました。
まあ確かに
>>179 のコードはアレだが、問題が解決する側にとっちゃどーでもいい話ではあるな
見苦し
VBA使いは総じてえらそう
excel97って、left$もright$も無いの?
204 :
デフォルトの名無しさん :2008/04/01(火) 21:47:10
public Sub AAA() Dim cnn as New ADODB.connection Dim RS as New ADODB Recoreset Dim value As Boolean cnn.connection String = _ "Provaider = micosoft.Jet.DLEDB.4.0;" & _ "Data Source = D:\データ.mdb:" '**************ダイアログボックス表示 value = Application.Dialogs(xlDialogSaveAs).Show If value = False Then Exit Sub End If **************
205 :
デフォルトの名無しさん :2008/04/01(火) 21:57:04
続き cnn.Open Set RS = New ADODB.Recordset RS.Open Source := "テーブルデータ" ,ActiveConnection:=cnn, _ Corsor Type := adOpenstatic, Option := adCmdTable ThisWorkbook.Sheets(1).range("A1").CopyFromRecordset RS RS.Close Set.Close cnn.Close Set cnn = Nothing End Sub 質問なのですが、上記を実行するとダイアログボックスが表示されて新規でファイルを 作成して今現在動かしているエクセルブックの名前を変更して保存しているだけになってしまいます。 結局元のブック(マクロ)をコピーしているのと同じです。 私のやりたいことはダイアログボックスを表示させて、新規でブックだけ作成してデータベースのデータ.mdbのテーブルだけを 新規ブックシートに書き込みたいです。どうすればいいでしょか?
>>205 サンプルを作ってみました。
'---------Sample-----------
Sub Data_Import()
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset
Dim ShinkiFullName As String, ShinkiFile As String
Dim wb As Workbook, ws As Worksheet, c As Integer
Workbooks.Add ' ブックを新規作成
ShinkiFile = ActiveWorkbook.Name '新規ブックの名前を格納@
'エクセルと同じフォルダにある「TEST.mdb」に接続
cn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\TEST.mdb"
cn.Open
'「TEST.mdb」内の「受注」テーブルを参照
rs.Open Source:="受注", ActiveConnection:=cn, CursorType:=adOpenForwardOnly, LockType:=adLockReadOnly
'新規ブックのSheet1にデータを写す
Set wb = Workbooks(ShinkiFile): Set ws = wb.Worksheets("Sheet1")
With ws
For c = 0 To rs.Fields.Count - 1 'フィールド名をA1から横にコピー
.Cells(1, c + 1).value = rs.Fields(c).Name
Next c
.Cells(2, 1).CopyFromRecordset rs 'レコードをA2以降にコピー
End With
'接続終了
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
'***** つづく*****
207 :
206 :2008/04/02(水) 04:25:09
'***** つづき ***** Shitei: 'ファイル名を指定/ファイル名が適切なものになるまでダイアログボックスを閉じないA Do ShinkiFullName = Application.GetSaveAsFilename(FileFilter:="Microsoft Excel ブック (*.xls),*.xls", _ Title:="新規データファイル保存") Loop Until ShinkiFullName <> "False" On Error GoTo Shitei 'ファイル名が重複した場合 With wb .SaveAs Filename:=ShinkiFullName .Close End With End Sub -------Sample おわり---------- ○あらかじめブックを作成・レコードを転写した後に、保存する場所・ファイル名を決めるようにしてあります。 (意図されている手順を変更しています。)>@、A ○変数にvalueなどの予約語は使わないようにしましょう。 ○Application.Dialogs(xlDialogSaveAs).Showでは、ファイル名を取得できません。 GetSaveAsFilenameやGetOpenFilenameの使い方をマスターされるとよいでしょう。
208 :
デフォルトの名無しさん :2008/04/02(水) 09:35:56
Cで言う「構造体の配列」みたいなのは、 なにで実現するのでしょうか。
ユーザ定義タイプの配列
210 :
デフォルトの名無しさん :2008/04/02(水) 12:42:58
ユーザーフォーム上のコマンドボタンを押したとき ボタンのオブジェクト名を変数に格納する方法ってありますかね?
211 :
デフォルトの名無しさん :2008/04/02(水) 12:43:45
↑あ、質問間違えた。無視していい。
212 :
デフォルトの名無しさん :2008/04/02(水) 22:51:53
>>206 .207さん大変貴重な情報ありがとうございます。さっそく試してみます。
明日に結果を報告します。
いつのまにかVBEのマウススクロールができるようになってたんだが。。 なんで?? Excel2003
214 :
デフォルトの名無しさん :2008/04/04(金) 15:59:16
ユーザ定義関数で説明文を書くには MacroOptionsを使えばよい事がわかりましたが、 引数ごとの説明文を設定するのはどうしたら 良いですか?
215 :
デフォルトの名無しさん :2008/04/04(金) 19:45:26
質問です。 Application.visible = falseで本体を隠したユーザーフォーム上のコマンドボタンを押すと 新しいウィンドウでExcelのファイルを開くようにしたいのですが、どうしたらいいですか。
そういうふうにすれば?
>>213 たぶんマウスのドライバ。MSのIntelliPoint使ってるだろ?俺もなってた。
>>217 確かにマウス交換した。そういうことかー。サンクス
まさかと思うが、VB6のVBEでもスクロールできるようにするプラグインがあるのもご存じない?
VB6はわかりませんがどこでもホイールはまさかしたら
>>213 解決したみたいだけど sp3で 普通にできるようになったよ
AddAutoScrollというものを使ってる
225 :
デフォルトの名無しさん :2008/04/07(月) 18:30:21
グラフ番号 (オートでVBAを記述させたときの『DrawingObjects("グラフ 2")』などの『2』の部分) は、グラフを作るたびに自動で振られていきますが、 グラフを消去した場合も番号は累計されていってしまいますよね。 いったんグラフを作って消してから、グラフ番号をリセットすることは可能ですか? (オートで書いた場合に、番号が『1』になるようにしたい。) グラフ番号をリセットする魔法を教えてください。 WinXP、Excel2003です。
226 :
デフォルトの名無しさん :2008/04/07(月) 20:56:21
質問をさせてください。 やりたい事は変数を用いて、範囲を選択する事です。 range("A1:C3").select のように範囲を選択する際に、変数を用いたく考えております。 dim hoge , piyo hoge = 1 piyo = 3 cells(hoge,1).select で単一セルは選択できたのですが、範囲指定が分かりません。 cells(hoge,1) から cells(piyo,3) までを選択する方法を教えて頂けたらば幸いです。 何卒ご指導をよろしくお願いします。
>>266 Range(Cells(hoge,1), Cells(piyo,3)).Select
たしかRangeとcellsは同シートじゃないとエラー出るのに気をつけてね
>>225 確かExcel再起動しない限り不可能だったようなことをどこかで読んだ記憶がある。
で、シートの追加・削除を行うマクロを長時間起動したままだとそのうち落ちるとかだったかな?
あいまいでごめん。
229 :
デフォルトの名無しさん :2008/04/08(火) 12:59:51
一つのセルに複数のセルを代入したいのですが、どうやればいいですか? 一つの場合 Sheets("シート1").Range("C1") = Sheets("シート2").Range("D9") というようにやっているのですが、二つ以上になって Sheets("入力シート").Range("C1") = Sheets("共通設定シート").Range("D9:E9") みたいにやると、何も表示されなくなってしまいます。
231 :
デフォルトの名無しさん :2008/04/08(火) 13:25:50
>>230 下の例間違ってました。訂正。
Sheets("シート1").Range("C1") = Sheets("シート2").Range("D9:E9")
やりたいことは、例をあげると
シート2のD9に「あい」と入っていてE9に「うえお」と入っているとすると
シート1のC1には二つ繋がった結果「あいうえお」と入れたいです。
vbaでやりたいなら、range("d9"),value & range("e9").value ワークシート関数でいいなら、concatenate
233 :
デフォルトの名無しさん :2008/04/08(火) 14:08:14
234 :
デフォルトの名無しさん :2008/04/08(火) 15:05:42
プリンタのトレイを指定して印刷したいのですが どうすりゃいいのか惜しえてください
235 :
226 :2008/04/08(火) 21:01:07
>>227 上手く選択することが出来ました!
これで作業に幅が出たと思います。
本当にありがとうございました。
2003 XP autofilter filtermode 等 「sheet2 range("A1") に、オートフィルターがかかっている(又は、オートフィルターモード)なら、 オートフィルターを解除し、 オートフィルターがかかっていないなら、何もしない。」 どう書いたらいいですか?
237 :
236 :2008/04/08(火) 23:24:46
揚げ忘れたwww
238 :
236 :2008/04/08(火) 23:48:02
次で解決しました。 Sub filter0() With Sheet2 If .AutoFilterMode = True Then .AutoFilterMode = False End If End With End Sub
239 :
236 :2008/04/08(火) 23:48:45
次で解決しました。 Sub filter0() With Sheet2 If .AutoFilterMode = True Then .AutoFilterMode = False End If End With End Sub
240 :
デフォルトの名無しさん :2008/04/09(水) 20:49:49
質問なのですが、 Sub excel_access4() Dim dbs As New ADODB.Connection 'ADOコネクション Dim rcs As New ADODB.Recordset 'ADOレコードセット Dim mydbF As String 'アクセス ファイル Dim mydbT As String 'アクセス テーブル Dim mtr As Variant 'エクセル 全データ Dim rcd As Long 'アクセス 行指定 Dim fld As Long 'アクセス 列指定 '例として acctest2.mdb の テーブル4 に書き込む mydbF = "acctest2.mdb" 'アクセス ファイル指定 mydbT = "テーブル4" 'アクセス テーブル指定 'アクセスデータベースを指定 dbs.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.Path & _ "\" & mydbF & ";" 'アクセスデータベースを開く rcs.Open Source:=mydbT, _ 'A ActiveConnection:=dbs, _ 'B CursorType:=adOpenKeyset, _ 'C LockType:=adLockOptimistic, _ 'D Options:=adCmdTableDirect 'E
241 :
デフォルトの名無しさん :2008/04/09(水) 20:50:17
'エクセルシート全データ範囲(2次元配列) With Worksheets("Sheet1").Range("A1").CurrentRegion Let mtr = .Resize(.Rows.Count - 1).Offset(1, 0).Value For rcd = LBound(mtr, 1) To UBound(mtr, 1) '1次行 rcs.AddNew 'LB:最小値(1) UB:最大値(5) For fld = LBound(mtr, 2) To UBound(mtr, 2) '2次列 'アクセスに行列で書き込み Let rcs.Fields(fld - 1).Value = mtr(rcd, fld) Next rcs.Update Next End With rcs.Close dbs.Close Set rcs = Nothing Set dbs = Nothing End Sub AとBはわかりますが、CDEは一体何をしているのかわかりません。 また実行すると実行時エラー3709がでます。 この実行時エラーの原因がさっぱりわかりません。 どなたか詳しい方お教え願えないないでしょうか?
VBAでレコード操作したことないけど カーソルとロックタイプを指定してるだけでしょ。 SQLでレコード扱う場合の基本だからググると(ry
243 :
デフォルトの名無しさん :2008/04/10(木) 15:16:58
Sheet1のB5~B35に曜日を入れていきたくて Sheets("Sheet1").Range("B5") = ("日") Selection.AutoFill Destination:=Range("B5:B35") 上のようにVBAで書いて実行したら、エラー"1004" RangeクラスのAutoFillメソッドが失敗しました。って出るんですがなんででしょ? Excelのほうでオートフィルしたら普通にB35まで曜日が出るんですが、VBAでやりたいので困ってます。
Sheets("Sheet1").Range("B5").AutoFill Destination:=Sheets("Sheet1").Range("B5:B35")
マクロの記録で「Selectionは使わない」「Rangeをいつでも明示する」ってオプションがあって、 それがデフォルトでもいい気がする。
あ、いやいや、そういうオプションがあったらいいな〜 もしあったら、デフォルトはこれがいいな〜 って妄想なので・・・
250 :
デフォルトの名無しさん :2008/04/10(木) 15:52:49
質問させてください。 WinXP、Excel2007です。 すみません、ヒントだけでもご教授下さい。 データが入ってるシートを選択したときに「sheet3」というシートにアクティブになってるシートのセルの一部をコピーしたいのです。 データが入ってるシートはたくさん増えるので、一個ずつ指定することができません… 手探り手探りつくってみたのがコレです。動きません。 Private Sub Worksheet_Activate() Range("A3").Copy ActiveSheet.Paste Destination:=Worksheets("sheet3").Range("D7") Range("A8").Copy ActiveSheet.Paste Destination:=Worksheets("sheet3").Range("D4") Range("B7").Copy ActiveSheet.Paste Destination:=Worksheets("sheet3").Range("E3") End Sub おねがいします
もう一ついいでしょうか フォントの色を変える方法はセルを指定するしかないのでしょうか? 表を作っていてさっき質問したB5~B35に入る曜日の土日だけ赤にしたいと思っています しかし月によって、どこに土日が入るかわからないのでセル指定ではなくて変数などを指定してやる方法はありますか? ちなみにSelect文を使って変数の中身を替えています
>>250 ThisWorkbookのマクロに
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Sheet3" Then Exit Sub
Worksheets("Sheet3").Range("D7").Value = Sh.Range("A3").Value
'以下略
End Sub
>>251 マクロじゃなくていいなら「条件付書式」。
マクロなら、
for each cell in worksheets("sheet1").range("B5:B35")
if cell.value = "土" or cell.value = "日" then
'interiorがうんたらかんたら
end if
next
>>253 こればっかりはしょうがないですよね、ありがとうございます!
>>252 動きました!!ありがとうございます!!
ですが、sheet3をクリックすると、一瞬だけ表示されて消えてしまうのですが…
>>255 どんな現象か良くわからんけど、"Sheet3"を"sheet3"にすると解決する?
>>256 そ、それだった!
解決しましたありがとうございます。
本当に助かりました。ご迷惑をおかけしました
知恵をお借りしたく、書き込みいたしました。 OS:XPSP2 excel:2003 グーグル先生にお聞きしてみたところ、どうも答えが返ってこないため、こちらに書き込みいたしました。 Excelを利用して、 @Webの検索フォームにA列に記載された文字列を入力し検索 A表示されたページの指定したテキストボックスに記載された文字列をB列に貼り付け を繰り返すマクロを組もうと頑張っているのですが、どうにもAが解決できません。 できればお知恵を貸していただけないでしょうか? 宜しくお願いします。
一概には言えない。 どのページか書いたら、答えが返ってくるかもな。
ちょっと外部には出せない類のページでorz こちらもphpで生成されたhtmlのページしか見れないため、htmlのソースからデータを取り出す形でやっているのですが... 文字列の部分だけを改変したhtmlのソースなら見せられると思うのですが、それでは駄目ですか?
なんだ、それなら文字列検索すればいいじゃん。 何が問題なんだ?
>>260 大事な情報扱ってるなら2chなんか頼るな
プログラム板、プログラマー板、ソフトウェアー板を徘徊して
ネタ探し回ってる奴いてるよ
解答者の振りして「それじゃ答えられない」「もっと具体的に」と
最後はネタパクられちゃうからね
もしくは「それは素人には無理。業者に出す仕事だ。」色んな言葉で揺さぶられるだけ
動的HTMLは俺も扱った
ここの板で聞いたけどいくら質問しても答えなんかない。
それよりファイル操作できる(ファイルの読み書きできる言語)調べろ
2chで調べたらダメだよ
解答者装った変なのが張り付いてるから
図書館やインターネットで調べてネタは誰にも言うな。
ファイルの読み書きだ。
くどい様だけどマジで2chの板は気おつけろよマジレス。
>>262 ありがとうございます。
他の板だと、色々とあるんですが、初めてヌクモリティを感じました。
お世話様でした。ありがとうございます。
>>262 そんなコストパフォーマンスが悪いことやってるの、引きこもりくらいだろwww
被害妄想
バリバリのマクロ使いは質問者の2〜3行読んだだけで 何を意としているかはわかってるよ わかった上で「それじゃよくわかんないよ」「もう少し具体的に」 それじゃこれか! わざとずれた解答のマクロ出してくる 質問者は一気に信用する 質問者が自分で改編できないことは解答者はわかってるw やがて改めて聞きに来るのはほぼ確実。 あとは「もう少しだから頑張ろう」とか適当に良きアドバイザーを装って ネタぱくったら、さよならベイビーwww 解答者の計算どおりネタはぱくって答えは出さない 計算どおりにいきそうにないときは多数を装い マナーだの常識だの礼儀だの罵倒する役柄と 優しさと知識を持ち合わせた解答者が入り混じる 少しくらい教えたところでこんなトコで質問してるレベルの奴に改編なんか無理。 質問者は解答してもらいたいのでペコペコしながら 最後は言われるがままw 偽解答者は初めからわかってるんだよ とくにファイル操作関係は気をつけたほうがいい VBAに限らず他の言語もね
病院行った方がいいよ
そちらからお先にどうぞ
なにこいつ
なんかすごい長文で不安煽ってるのがいるが安心しろ オレがじゃんじゃん答えてやるから、そのままHTMLをうpれ
プッ んじゃタグ抜きマクロでも書いてみ リンク、object、span ヨロチクビ それ見てから質問するか考えるわw
>>258 は、どう見てもパクるに値するネタでない事だけは確かw
どうみても金儲け絡んだ情報収集にみえますが 次のレスでは>phpで生成されたhtml ピンポ〜ン!99%の確立で当たりましたね
頼むからコテつけてくれ。あぼんするから。
275 :
デフォルトの名無しさん :2008/04/11(金) 22:01:41 BE:378334793-2BP(380)
やっぱ Excel VBA で マルチスレッディングって 無理?
276 :
デフォルトの名無しさん :2008/04/11(金) 22:15:07
Excel 2003 のVBA の言語仕様書ってどこかにないでしょうか。
やるならマルチプロセスだなw
278 :
デフォルトの名無しさん :2008/04/12(土) 13:44:44
OS : windows XP バージョン:excel 2002 VBAでのクラスモジュールの使い方がさっぱりわかりません。 コレクションの要素を設定/取得するだけのクラスすら作れません。 どこが間違っているのか&どう直せばいいのか、どなたか!m(_ _)m '--クラスモジュール----Class1 Private a As Collection Private Sub Class_Initialize() Set a = New Collection End Sub Public Property Let mAdd(ByVal value As Integer) a.Add (value) End Property Public Property Get mGet() a.Item (a.Count) End Property
'標準モジュール------ Sub test() Dim i As Integer Dim cal As Class1 Set cal = New Class1 'プロパティへの代入 For i = 1 To 3 cal.mAdd (i) cal.mGet (i) Next i End Sub
自己解決しました ものすごく恥ずかしい質問をしてしまいました><
ActiveX EXE、アウトプロセスCOMサーバでぐぐれ
283 :
デフォルトの名無しさん :2008/04/13(日) 20:36:16
図形の線色を変更する為にソースの中に、 Selection.ShapeRange.Line.ForeColor.RGB = RGB(255,10,10) と指定したのですが、 Line.ForeColor.RGBと指定するのは出来るけど良くないとの指摘を受けました。 VBやVBAの常識では、Selection.ShapeRange.Line.ForeColor.SchemeColor = 2 等とするらしいのですが・・・ RGBだとどのような弊害があるのでしょうか? 常識的な事を質問してすみません。 どなたかご教えて頂けませんか?(>_<)
なんで指摘した人に聞かないの?
285 :
デフォルトの名無しさん :2008/04/14(月) 00:25:53
>>284 ご指摘頂いたかたに何度か理由をお聞きしましたが、
常識なんだから当たり前と明確な裏付けを貰えなくて、
それで知人や本、ネットで調べても分からずじまいで、
ご質問させて頂きました(>_<)
Line.ForeColor.RGB使ってたときは左辺にどんな値を代入してたの?
あ、ごめん書いてたなwwww(ゲラプゲラオプスwww たぶんあれだろ。RGB値だと何の色を指定してるかわからりずらいからだろ。 っつってもどっちもマジックナンバー状態だから(ry っつーかつい最近はじめてVBAさわった俺からすると コンパイラの方でこういう色の値は予約語としてもっとけと思ったな
それを答えるために詳しく聞いてたのかよ なんだこいつ
わかりづらいなら定数定義すりゃいいだけだしよくわからんな
>288-289 全然俺の言いたいことを理解してないな。 さすがVBAしかさわったことのないゴミどもだwwwwwwwww ちょろっと触った感じ、他のコンパイラと比べて 半端なく使いづらいからVBAそのものが昔から進化してねぇんだろうな。 まぁお前等のレベルもそこで停滞してるのもしゃあねぇわなwwww
VBAを学ぶのにオススメの書籍を紹介してください. VBAは全く初めてですが,C,fortranならそこそこ使えます. よろしくお願いします.
マクロを記録して生成されたソースを見るのが一番参考になる
なるほどwww
294 :
デフォルトの名無しさん :2008/04/14(月) 22:29:42
今日は釣果がいまいちですね
Application.quit ThisWorkbook.close savechange=false でExcelを終了させているのですが、 5回に1回くらいプロセスが残ることがあります。 GUIは消えてるのですが・・ Excel2003です。
未解放のリソースが残ってるんじゃねーのか?
>>296 特に無いと思います・・
DBとか使って無いし
ファイル出力はそのたびクローズしてるんで。
そもそも、リソース未開放だとプロセス残るんですか?
298 :
283 :2008/04/15(火) 00:27:43
283の書き込みした者です。 (NG)…RGBプロパティ使用 Selection.ShapeRange.Line.ForeColor.RGB = RGB(255,10,10) (GOOD)…SchemeColorプロパティ使用 Selection.ShapeRange.Line.ForeColor.SchemeColor = 2 右辺のマジックナンバーには目をつぶってもらって、 RGBとSchemeColorプロパティの観点で見て欲しいです。 今の時点で常識と言う言葉が出てきていない時点で VBA使用者の常識では無さそうですね。
個人的には、RGB(255, 10, 10)が(RGBの順だという前提で)やや白い赤とすぐ判るが。 Excelのオペレーションで考えると、自由に色を使うと言う感じではなく規定の色から選択して使うイメージだよね。 その色がSchemeColorなんだから、VBAをExcelのオペレーションの延長と捉えるならその方がいいということなんでは?
301 :
283 :2008/04/15(火) 00:59:05
>>299 >>300 返答ありがとうございます。
>Excelのオペレーションで考えると、自由に色を使うと言う感じではなく規定の色から選択して使うイメージだよね。
規定色で書かれた図形とは、違う色としたい要件でしたので、
規定色は使わずに赤=0〜255, 青=0〜255, 緑=0〜255を自由に選ぶようにしていました。
色の自由度が求められる要件で、あえて色の制約があるSchemeColorの方が良いのかが分からないのです(>_<)
>>301 その用件を知らないんじゃなく?
知ってたらあり得ないだろ
>>301 おまいにひとつ教えてやろう
Excelでは、「赤=0〜255, 青=0〜255, 緑=0〜255を自由に選ぶ」
ってのは無意味
Excelで表現できるのは、パレットに登録されてる56色のみ
「赤=0〜255, 青=0〜255, 緑=0〜255を自由に選ぶ」をしたところで、
56色の中から一番近い色が選ばれるだけだよ
304 :
283 :2008/04/15(火) 01:16:59
>>302 もちろん、そのご指摘したかたは要件を知っています。
VB/VBAの使用者なら誰もが知っている常識と言われて
しまったので私がただ単に無知なだけと思っていましたが、
やはり302さんが仰るとおり、有り得ないことみたいですね。
305 :
283 :2008/04/15(火) 02:52:06
>>303 それはセル等に適用されると言うのは当然その通りだと思います。
今回の対象のシェイプにもは適用されないのでは無いでしょうか?
実際に試してみると分かると思いますが、少しずつ値を変えて、
並べて表示していくと、56色以上同時に表示出来ますから。
306 :
303 :2008/04/15(火) 05:05:36
>>305 すまん、完全に俺の早とちりだった
Dim i As Long
For i = 0 To 255
With Cells(i + 1, 2)
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, .Left, .Top, .Width, .Height)
.Fill.ForeColor.RGB = RGB(i, 0, 0)
Cells(i + 1, 1).Value = .Fill.ForeColor.RGB
End With
End With
Next i
図形は好きな色使えるな
SchemeColorの色数も81色だし(重複はあるが)
結論として、指摘した人が俺と同じ早とちり OR 知ったか OR 低脳って事で、
俺はおまいが正しいと思うよ
>規定色で書かれた図形とは、違う色としたい要件 (;´Д`)何この要件・・・ 「ある規定色で描かれた図形とは別の色を使う」って意味じゃねぇのか?www Excelで規定された色と違う色を使うことになんの意味がるんだと小一時間(ry 要件も理解する側がアホだったらとんでもない意味に変化するからな。 まず常識的に考えて(ry
!?
“不運(ハードラック)”と“遭遇(ダンス)”だぜ?
283 303ではないけれど、
そいや、昔のverで、色の指定でRGB値だとうまく行かなくて
あれれーと思っていろいろ実験したなぁ。
確かに出来るやつと出来ないやつがあって、調べたけど、結局
>>303 と同じ考えに至って自分を納得させたことがありました。
自分勝手に色決めてると白黒印刷でわけわかんなくなる可能性大
313 :
283 :2008/04/16(水) 01:14:55
>>303 >>306 ひとまず303のさんのおかげで、VBAの図形に関しては、制約が無い事が実証されました。
この質問スレ見てる人達の共通認識になったと思うので、これで良かったと思いますよ。
ありがとうございました。
文字が入っている終端のセルを指定する方法はちらほら見かけるんですが、 一番先頭のセルから終端までを選択する方法ってありますか? A列の途中から文書の中身が始まります。 開始の行数は変動します。 開始から終了まで、50行×20行ほどです。 文書の開始は必ず同じ内容のValueのセルです。 For文で開始のセルのValueを検索し、Thenで結ぶ、ぐらいまでは考えたんですが そこから先がまったく予想もつきません。 もしも一番先頭の(文字の入っている)セルより前の空白の行を すべて消去するうまいやり方があったら教えてください。 空白の行さえ消せれば文書の中身のセル番地が固定されるので、 (テンプレートが決まっていて、いつも全く同じ順番に並びます) 番地を指定してデータを他シートにコピー&ペーストできます。 イメージ図 A列 B列 C列 1行 空白 空白 空白 2行 空白 空白 空白 ・ ・ ・ n行 aaa bbb ccc A列をaaaで検索 aaaのRange(A,n)のnを取得 1からn-1行を削除 どうかよろしくお願いします。
315 :
303 :2008/04/16(水) 01:32:45
>>314 Range("A1").Resize(Range("A1").End(xlDown).Row - 1).EntireRow.Delete
316 :
314 :2008/04/16(水) 08:36:38
>>315 >>303 たった一行で! ありがとうございます
これで仕事もはかどります。本当に助かりました
エクセルで VBAを使うのは 地獄に落ちる 最適手段 アクセスで VBAを使うのは 神の身許に 至る近道
318 :
デフォルトの名無しさん :2008/04/16(水) 13:46:42
エクセルからアクセスへステップUPするのは、比較的大変なんですか?
そういうもんじゃないし
321 :
デフォルトの名無しさん :2008/04/16(水) 19:03:22
エクセルは未来のアクセスで アクセスは未来のエクセル也 地獄と極楽を永劫回帰
ようやくうちの会社の全PCにアクセスが入ったんだが 何に使うのかよく分からない アクセスだとできるけどEXCEL+VBAだとできないことって何? 楽で見栄えが良くなるってだけなのかな? EXCELVBAはそこそこ使えるようになったが アクセスを勉強するか、エクセルをさらに研鑽するか迷う
>>322 C++などからもデータベースにアクセスできるとかじゃね?
そりゃ、C++でもExcelはいじれるけど・・・
>>322 Excelも便利だがAccessもいいぞ。
業務アプリのGUIも作れるし、百万件ぐらいのデータ処理とかも可能。
RDB+VBA+レポート。
何でも出来てしまうので、何でもやりすぎてしまう。
そんなツール。
Excelを正しく使わないと会社はすぐ、Access等のDBを導入しようとするが そこに待っている世界は....
>>322 エクセルを研鑽するにしてもアクセスのようなデータベースを知ってからのほうがいいです。
エクセルしか知らないと斜め上のテクニックばかりに身に付いちゃうかもね。
EXCELの典型的斜め上テクニック 串刺し演算 セルの結合 複雑な集計はVBAで 報告書、仕様書、企画書その他何でもEXCELで
>>322 例えばファミレスの注文データベースを作るとします。
一回の注文には複数の料理が含まれるとして
注文件数の合計
料理別の数量合計
を計算したい時、あなたならどんな表を作って集計しますか?
>>328 お前がAccessで作ろうと思ってる表と同じもの
もっとrelationalなもの作るだろ?(それなりに高いスキルは要るが) Accessのデータ構造は単純に日付/客ID/料理ID/点数 で決まり。必要に応じてSQLで集計する。
Excelでも同じ構造でいいじゃん。何か不都合でも?
ファミレスごときのメニューでリレーショナルなものってwwwwww(ゲラプッチョwww 高いスキルってwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
EXCELだと一定数のデータの集計だと 中間集計取りながらリアルタイムで全体見ながら データ入力出来るから集計は早い。 だが、どんどんデータが入ってくるよう な対象には弱い。量が増えてくると ニーズも増えて、細かい集計項目追加の嵐 魑魅魍魎になって作成者も理解できなくなる こういった対象にはDBのほうがまだ強い ってか、こういったニーズを解決する為に DBが作られた(とも言える)
>>322 素人レベルならエクセルで十分だと思うよ
>>323 ほとんど関係ないよ
>>333 大筋は合ってるけどDBってのは戦後からある概念だよ。
DB→Accessの意味で言ってるのかな?
戦後って久しぶりに聞いたわ
もはや戦後ではない
337 :
328 :2008/04/19(土) 17:18:29
>>330 が示したモデルでいいでしょう。
客IDだとお客さんをIDで区別してそうな印象を与えそうなんで注文IDと呼びかえますね。
さらに何番の席で受注したか、その席は禁煙席か喫煙席かも記録しましょうか。
日付/注文ID/席番号/喫煙区分/料理ID/点数/
338 :
328 :2008/04/19(土) 17:33:28
24番の禁煙席に案内したお客さんが、やっぱり55番の喫煙席に移動したいと希望したら、データもそれにあわせて訂正したいですよね。 Excelだとこの場合、席番号と喫煙区分を何行も書きかえないといけません。 この時、席番号だけ直して喫煙区分を直し忘れたりしないように気を付ける必要もあります。
いや、それはどう考えてもExcelの使い方が悪い。
どう考えたんだよ
341 :
328 :2008/04/19(土) 18:00:51
Accessなどのリレーショナルデータベースではこのような問題が解決できる仕組みが提供されています。
>>339 まあお好きなように。
Excelは横展開でデータを記載しないと使い勝手悪い。 Accessは縦展開でデータを追加してかいて、用途に応じて必要な表に組み合わせる。
データの持ち方次第でAccessだって修正箇所多くなるだろ? どの座席が喫煙/禁煙なのかなんて予約データに関係ないんだから別の場所にあればいいじゃん。 「Aさんは24番の禁煙席を予約している」じゃなくて「Aさんは24番を予約している」「24番は禁煙席である」だろ? データ構造(設計)にExcelやAccessが関係してくるのか?
344 :
328 :2008/04/19(土) 20:59:31
>>343 正規化のことを言っているのですね。
おっしゃる通り、喫煙区分は席番号に従属しています。従属の解消はExcelでも簡単です。VLOOKUPを使えばいいのです。
Excelが苦手なのは注文と料理のような一対多の関係を扱うことです。
マスタの種類が増えれば増えるほどLOOKUP系では扱いづらくなるな VBAで条件増やしたLOOKUP亜種を作成しても良いけど、自分だったら素直にSQLを 書くほうを選ぶ
346 :
デフォルトの名無しさん :2008/04/20(日) 15:29:49
Enabledでテキストボックスをロックしたときに文字の色が変わらないようにしたいんだが、できるか?
できるがお前の態度が気に食わない
348 :
346 :2008/04/20(日) 19:04:54
すまなかった。他のことは出来るんだが、なぜかこればかりは頑張って探しても見つからなかったんだ。 人に聞くってのは、勇気がいるもんなんだぜ。こんな質問のために荒れるのはいやだろ?さぁ教えてくれ。
なんだそりゃ脅迫か?
>>348 できるか?に対してちゃんと「できる」って言ってくれたんだから
贅沢言うなよ
>>348 荒れるのは嫌だが、お前に教えるのはもっと嫌だ。
荒れて結構w 誰も困らないスレだwww
353 :
デフォルトの名無しさん :2008/04/20(日) 20:43:40
あるシートに在るセルの内容を 別のシートにコピーするにはどうしたらいいですか? シート名はプログラム内に書き込まれてあって、 もしコピー先のシートがなければ、新規にシートをつくりたいのです。
>>353 その操作をキーボードマクロで捕捉してみたら?
355 :
デフォルトの名無しさん :2008/04/20(日) 22:52:39
>>355 普通。俺は何もプログラミング言語分からず、VBAに挑戦した。独学で色々して、悩んでもがいて、なんとかクラスモジュールを使えるくらいまでになった。
まずはすぐ聞かずに、マクロ記録とかぐらい試せ。
>>356 クラスモジュールを使うとどんなことが実現できるの?
>>356-357 まさにそこで今ハマってます。
Excel2007みたいな感じで、ステータスバーに「合計」と「データの個数」が
常に両方とも表示されていたら便利だなぁ、と思ってこんなマクロを書いてみました。
------------------------------------------------------------------------
Sub Worksheet_SelectionChange(ByVal Target As Range)
  'ステータスバーに「合計」と「データの個数」を二つとも表示
  Application.StatusBar = " 合計=" & WorksheetFunction.Subtotal(9, Target) & _
              " データの個数=" & WorksheetFunction.Subtotal(3, Target)
End Sub
------------------------------------------------------------------------
これを、PERSONAL.XLSに書けば動くかなー、と思って気軽にやり始めたのですが、
甘くなかったです・・・。
いろいろググったり、詳しい人に聞いてみたりしたら、どうもクラスなるものを
使わないと解決しなさそうな感じなんで、今必死こいてクラスの勉強しとります。
VBA使いはひどいなwwww 根本理解してないというか理解しようとしていないwwww 動けばいいやーっていうスタンスでやってきたからそうなる
> 根本理解してないというか やっぱそうかー。なんか「VBA使い」に恥をかかせたようでスマン…。 たぶん、俺がひどいだけだと思うんだ。
準マスター文書として使えるのがVBA/OLE未使用文書 準々マスター文書として使えるのがVBA/OLE多用文書 半端に使ってるものは信頼性が一番低く、生ゴミ文書 扱いになる。
ステータスバーを使わずに メッセージボックスやユーザホームで "処理中です・・・・ " & Count & "行" と表示させながら裏で実行させる方法ってありますか? 例えばMsgBoxとかで表示させると、そこで止まってしまうんですが・・・
>>361 ExcelアプリとExcelデータは区別したほうがいいってことね。
ユーザフォーム
>364 ありがとうございます、やはりこの手の処理方法は VBAのみで実現するわけじゃないんですね ちょっと面白そうなので、VBS使ってその方向で検討してみようと思います
VBSでやれることはVBAでもやれるぞ。 参照設定にあるはずだ。
use form
369 :
デフォルトの名無しさん :2008/04/22(火) 16:06:57
引数で受け取った配列(arr)が1次元か2次元かを判定する方法で 今は On Error Resume Next 'エラー出力を停止する lng = UBound(arr, 2) lngErr = Err.Number On Error GoTo 0 'エラー出力を再開する のようにUBound()関数を使用してエラー発生の有無で判定してるのですが 他に良い方法ないでしょうか。。
>>369 エラーを意図的に起こして別の情報を得るコードは
Acess−VBAなど、DBという会社システムでは泣く子も黙る世界と因縁の深い汎用機大型機の
コードでは常套手段。
やはり一般的にはしないほうがいい。
特にAccessなどDBが絡むシステムでは、VBA使うだけでも領域侵犯とみなされやすい
ので注意。
>>362 初心者の俺が解答するから間違ってたらごめんよ。
例えば、50件のデータを処理する場合はカウンタ変数を作っておいて、1件の処理終わる度にそれに1ずつ足していけばいいと思うよ。そして、「処理件数/全件数」をユーザーフォームに貼りつけたラベルに表示するのを繰り返す。
マスターの皆さん見当違いだったらご指摘をお願いします。
>>371 忘れてた。
裏で処理するなら「Application.ScreenUpdating」を使って画面更新止めたり、EXCELを非表示にした方がスマートかな。
VBAであんまり凝ったことをやろうとしない方がいいと思うがな 作り捨てアプリ作成言語として割り切って使った方が前向きかも
昔は無茶ばかりしたなあ
バカクライアントが作ったエクセル表 きままにセル結合したり、色に意味持たしたり、2行結合のセルと2行間に罫線が無いセルに それぞれ意味があったり、その行数が20行位まで別条件だったり、もう気が狂いそうです。 これをコンバートする為にまず整形しなければならず、1万行近い定期案件なのです。 凝った事をやるつもりはさらさらないが仕事だから仕方ないのです
>>369 SDKに配列の要素があるかどうかの判定をするAPIがあったはず
名前忘れたけど
>>369 配列の次数やレンジを引き数に積んで貰わないの?
エラーで判定がいやなら、無難にIFかCaseでいいんじゃないの?
>>376 工数出せばいいだろうに。
・お前のウンコシート使って無理矢理自動化すると1人月
・俺様が作ったスマートな表を使って自動化すれば0.5人月
両案出して上司に決済させろ。
1愚人月 0.5賢人月
382 :
デフォルトの名無しさん :2008/04/23(水) 23:59:01
ActiveWorkbook.Pathで、自分のファイルの存在場所がわかりますが、
拡張子をxlsからxlt(テンプレート)に変えた場合、保存されていない
状態でOpenしますので、xltファイルの存在Pathが取得できません。
元となった、xltファイルの存在場所のPathを知る方法は無いでしょうか?
Googleでは、「ファイル→開く」だとPathは取得できるが、xltファイルを
ダブルクリックで開いた場合は裏技的なコードを書かないとダメと書いてあり
その人はそのコードを無くしてしまったとあったのですが…
http://www.keep-on.com/excelyou/2001lng4/200110/01100516.txt
383 :
ゆうすず :2008/04/24(木) 13:05:32
こんにちは、お邪魔します。 エクセル2003、ウィンドウズXPを使用しています。 マクロの記述は本で調べるなどして奮闘中ですが、 調べてもわららないことがあったので書き込みさせていただきます。 家のパソコンだと、なぜか[ツール]→[マクロ]とすすんで、 本来だったら[マクロの記録]となるのでしょうが、 ここが白抜きで実行できません。 セキュリティも下げてみたりしたのですが、どうにもわからなくて…。 なんだか初歩どころか一歩も進んでいないような質問で、大変恐縮なのですが、 どなたか教えていただけると助かります。 よろしくお願い致します。 ゆうすず
384 :
デフォルトの名無しさん :2008/04/24(木) 13:08:08
以下のような部分でプログラムが止まってしまいます。 どうも関数内の「"」がVBAの中での「"」と混同されているらしく、 うまく回避できません。いっそ「0」に置き換えてもいいのですが・・ Sub Finding_Nimo() Range("A41").Formula = _ "=IF(ISERROR(VLOOKUP(B1,$DC$2:$DD$48,2,FALSE)=TRUE),"",(VLOOKUP(B1,$DC$2:$DD$48,2,FALSE)))" End Sub いい解決法は無いでしょうか?
385 :
デフォルトの名無しさん :2008/04/24(木) 13:12:04
>>383 セルがダブルクリックされた状態になっているのでは?
他のセルを選択しなおせばOKのはず
>>384 この場合は、「""」は「""""」と記述すれば上手くいくと思うよ。
>>386 おお、上手くいきました。ありがとうございます!
388 :
デフォルトの名無しさん :2008/04/24(木) 21:24:09
OS:XP Excel2003 共有フォルダにあるファイルを開きたいのですが、 どのように書けば共有フォルダを指し示すのでしょうか? 例えばCドラにあるファイルなら「C:\ファイル名」 と書きますよね。
\\共有名\hoge
ブー 詳しくはWindows板で聞く事 スレ違いというか板違い。 板違いの質問への回答はご遠慮下さい。
↑ 了簡が狭いとはこの事を言うんだね。
392 :
389 :2008/04/24(木) 21:47:13
板違いでしたか失礼しました。
393 :
デフォルトの名無しさん :2008/04/24(木) 21:58:49
エクセルの質問じゃないのか? 知らんけど
>>390 >>388 はEXCELでVBAを使用して開く場合はどうしたらいいのか聞きたいんだと思う。
395 :
388 :2008/04/25(金) 01:05:42
>>394 その通りです。
VBAで共有フォルダのファイルを開くコードを
書こうと思ったのですが、どう書けばいいのか
わからず困っていました。
適当にググったのですが答えは見つかりませんでした。
>>388 で答えはわかったの?
共有フォルダー
コンピュータ名=EXCELの
共有ディレクトリVBAの
サブフォルダーXLSの
ブックtest.xlsを開くコードは?
397 :
デフォルトの名無しさん :2008/04/25(金) 12:44:00
工数の累計を求めたいのですが、同じ計算式でも EXCELのセル上で計算したものと、VBA上で計算したものと では結果が微妙に違います。 何故でしょうか?
398 :
346 :2008/04/25(金) 13:48:29
セルの書式設定のパターンで網掛けをやると文字の上に網かけるじゃないですか VBAの力を駆使して文字の下に網かけれるようにできないですか?
VBAなどでのExcelの操作は、 あくまで人間が操作してできることしかできないよ、それ以上でもそれ以下でもない。
またアホが湧いた
入門用の書籍で やさしくわかるExcel関数・マクロ 改訂版 を買おうと思うんだけどどう?
ポケモンキャラクター図鑑とかウルトラマン 怪獣図鑑みたいなものだと思って買う コンビニで売ってるくらいのもので、実にコンビニエンス! な本。ただし内容は覚えないほうがいいよ。
>>402 じゃあおすすめ教えて下せえ
皆さんはどうやって覚えたの?_実習あるのみ?
>>403 俺はインプレスのできる大事典で覚えた。
>>404 おまえは俺か
俺もそれで覚えた。カラフルで見やすくおすすめ。取り組みやすい。
>>402 ドラえもんのポケットの中の道具辞典だろ? マクロや関数は。
ドラえもんの道具辞典みたいなもんだよ。エクセル便利マクロ集ってのは。
(ちょっと使いすぎたり適用範囲間違えるとのび太みたいに災難に合う)
VBAがウルトラマンに出てくる怪獣みたいなもの。
最近のだと しっかり学ぶ! Excel VBA 短期集中講座 [VBAマクロ基礎] 編 がいーよ。
408 :
デフォルトの名無しさん :2008/04/28(月) 11:34:36
VBAforEXCEL 2003 sp1に関してなのですが、F8で一行ずつ実行しているときに、 Application.ScreenupdatingをFALSEにすると、なぜか(?)一行ごとに 画面の更新が行われ、非常にもたつきます。 これは、2003のみの仕様なのでしょうか。 あるいはサービスパック適用で改善されたりしますか。 よろしくお願いいたします。
2003SP3 Application.Screenupdating = FalseでもF8で実行すると画面は更新されています ただし、非常にもたつくという症状はありませんでした いずれにしてもSP3は適用しておいた方がいいと思いますよ
410 :
408 :2008/04/28(月) 12:46:17
>>409 ありがとうございます.
ただ、不思議なことにUpdating = TRUEの記述が入っていると、
はやく実行されるんですよ。ちょうど意味が逆転する感じで・・。
411 :
デフォルトの名無しさん :2008/04/28(月) 13:16:36
スマン、ちょっと教えて欲しいんだが、数字を小さい順に並び替えるのってどうやるんだ?RANKにすりゃいいのか?
412 :
デフォルトの名無しさん :2008/04/28(月) 13:30:05
print文で正規表現を用いた出力をしたいのですが、 どのようにしたら良いでしょうか。 例:print "(tab)Hello" (tab)の箇所にタブを入れたいと思います。 もしくは、正規表現を用いずに出力する方法はあるのでしょうか。
415 :
デフォルトの名無しさん :2008/04/28(月) 14:19:08
>>411 配列のソートが出来ないのは不便。
シートに数字を広げて、昇順かけるしかないでしょ
Sub 長さ4の配列データの並べ替え( A ) if(A(1)<A(2)AND(A(2)<A(3))AND(A(3)<A(4))then return end if if( (A(2)<A(1))AND(A(1)<A(3))AND(A(3)<A(4))then A(1)=A(2) A(2)=A(1) end if あと14個似た構文が続く End Sub 以前、会社のシートにこれがあった。 バグが出る度に書き直していった苦労の跡がにじんでた。 なんだかんだいって、結構偉大なコードだと思った。
417 :
412 :2008/04/28(月) 14:26:47
>>413 ありがとうございます。
解決しました。
418 :
デフォルトの名無しさん :2008/04/28(月) 15:15:49
>>416 A(1)=A(2)
A(2)=A(1)
この時点で両方A(2)
俺はソートにはADO使っちゃうな
>>411 配列のソートならググればサンプルがゴロゴロ転がってると思うが。
>>422 えれー遅いな。
つかえねー。
>>423 自前で作れば数倍早いが、こんだけ楽さしてもらってこのスピードなら十分使えるだろ
'Common Language Runtime Library を参照設定
Const NUM_MAX As Long = 65536
Dim DataList As mscorlib.ArrayList
Dim i As Long
Set DataList = New mscorlib.ArrayList
For i = 1 To NUM_MAX
DataList.Add Int(Rnd() * NUM_MAX)
Next i
Range("A1").Resize(NUM_MAX).Value = _
Application.Transpose(DataList.ToArray)
DataList.Sort
Range("B1").Resize(NUM_MAX).Value = _
Application.Transpose(DataList.ToArray)
DataList.Reverse
Range("C1").Resize(NUM_MAX).Value = _
Application.Transpose(DataList.ToArray)
Set DataList = Nothing
ソート関数ぐらい自前でちゃっちゃと用意できないあたりが やっぱVBAスレって感じでいいね(ゲラプwww
大きく出たな
>>425 こんな口ばっかりのヤツに限っていまだにVB6あたり使ってそうw
VB6は軽くていいぞ 業務アプリのGUIはアレで十分なんだがな
エクセル使っていながらソートを自作するはめになったのは何故か。 自問するべきだ。どこで間違えた?
逆だ。配列の使いにくさはVBAが最強。 故に車輪の再発明ばっかやるハメになる
VBAでもStringBuilder使えるのね…
432 :
デフォルトの名無しさん :2008/04/30(水) 09:35:33
エクセルVBAスレの割りに、配列をシートにペーストして 昇順後→再格納の手法が忘れられてないかい
>>432 質問者はそれを求めてるように思える
そもそも配列でもなく、再格納の必要もなさそうな気がする
>>424 これは便利
勉強になりました
436 :
デフォルトの名無しさん :2008/04/30(水) 10:13:09
>>433 A
↓
Z
このボタンを押すマクロ記録を何度やったことか。
しかも、ラベル行がないと、滅茶苦茶になるし。
>>424 参照設定したらDataList.とピリオド打てばインテリセンスが効きそうなもんだが、効かないね。
SortやReverseやToArrayの他にどういうメソッドやプロパティがあるかおせーて。
オブジェクトブラウザでも出てこねー。
必要な箇所だけCSVに転記(このマクロはVBAで自分で書いてすぐに捨てる) 外部プログラムでソートした別のCSV作って読み込む。これを元の場所に再格納 (このマクロもVBAで作ってすぐ捨てる) 外部プログラムは当然VB. VBS on WSHという手段もあるが、これは手軽だがそれほど 早くはない。 .NET FrameWork(MS無償提供)入れたWindowsならVBコンパイラ付いてるぞ。 インテリセンスとかそういう高機能なIDEじゃないとプログラム開発出来ないという のであればVB 2008なりなんなりGetしてInstall) CSV読み込んで配列に格納して、それをソートする処理はまぁちょっと勉強しなきゃ 辛いだろうな 兎に角Excelシートに見苦しい、一度しか使わないようなVBAコードは残さないこと が精神衛生上好ましい。
>>439 シートから不要不急のVBAコードは削除することは同意
誤動作された場合の被害が大きい。
ただそういった使用済みのコードは完全に捨ててしまうのも
やはり問題。別の理由で、データ破損してしまい作り直さな
ければならない場合とか、大騒ぎになるな。
テキストファイルに落としてオブジェクトとして
埋め込んでおくのがいいと思う。
>>442 ちょっと複雑な比較順序でソートしなければならない場合とかだと
(ex 国語の点数が同じなら、数学と理科の重み4:3の平均で比較し、
それも同じなら、歴史と社会の重み2:3の平均で比較し )
やっぱりVBAコードに頼らざるを得ないよ。
手動操作で出来る場合も多いけど、ミスを疑われるから検証作業が要求されるので
結局、コードが残って再現もできるようにしといた場合のほうがずっと信頼される。
自分のだったら兎も角、共有シートとかだと、勝手にシートや列を行を増やしたり、
隠したりすることも出来ない場合が殆どだし、何かまとまった操作をする場合は
やっぱりVBAを使うよ。
でもVBAを使ってちょっと荒くデータ操作とかすると古いバージョンのExcelだと落ちるは、
シートが何故か肥大かするわで、嫌う場所も多いね。
だから外部ファイルにデータだけ抜き出して、処理してから書き戻すってことを
要請されることが多い。
シートのデータは、手作業だと抜き出しにくいように工夫されてるから、外部ファイルに
書き出す作業もVBAを使う。
444 :
デフォルトの名無しさん :2008/04/30(水) 14:14:19
つまり、元々のシートの設計が悪いとVBAに頼った糞運用せざるを得なくなるってことですね。
そうExcelの設計が悪すぎなのかもな
447 :
デフォルトの名無しさん :2008/04/30(水) 14:40:00
csvの仕様も死ねる
>>443 > 結局、コードが残って再現もできるようにしといた場合のほうがずっと信頼される。
コードはすぐ捨てるんじゃなかったの?
>>439 とは別人?
最新バージョンはどうかしらないけど(できるの?) Excelは手動操作ログ記録とそのロールバックは保存できないからな。 使ったVBAをプリントアウトしてシートから削除して提出 したらVBAが作業ログと差分を兼ねることにもなる。 (自分と先方の作業前シートのバックアップ保持は当然)
一般ユーザレベルのノウハウは、ソフトウェア板ででもやってちょ
Excel&VBAくらい「一般人」向けの組み合わせはないと思うけどな
ぷ、ぷりんとあうとしてさくじょ・・・
>>443 その例題はVBAいらない。
VBAでやりたいなら止めはしないが。
>>454 それならばやり方教えて下さい。というかVBA無しの手作業でやりなさい。
報酬は一切ありませんが。
生徒ID/国語得点/数学得点/理科得点/歴史得点/社会得点
の表がシートA1からF9999まで埋まっています。
RANGE A1:F9999以外のセルは一切改変禁止です。
シートを複製したりすることも禁止です。
(後で削除したりクリアすることも禁止です。監視員が
後ろで貴方に不正操作がないか監視していると想定して下さい。)
この条件で、ソート
order by
(5*国語得点+4*数学得点)/9,
(4*数学得点+3*理科得点)/7,
(3*理科得点+2*歴史得点)/5,
(5*歴史得点+3*社会得点)/8,
(4*社会得点+5*国語得点)/9
ASC
でお願いします。
スルーよろ
457 :
438 :2008/04/30(水) 21:12:31
458 :
455 :2008/04/30(水) 21:20:25
追加条件 デュアルモニターで、立ち上がってるプロセスやクリップボードまで 監視されており、セルを別のブックに貼付けてなんて姑息な技は 使えないということは言う迄もありません。Lotus-123,OpenOfficeを使うこと 等も無理でしょう。 さて、この状況でどうやってソートするのか期待してます。
>>458 別のブックに貼り付けてソートしてから元のシートに貼りなおすのはありだなあ。
姑息とは思わない。
なんでそれをやらないことにこだわってるの?
シート追加して、元シートのA1でshift+*して、コピペして、適当な計算式追加してソートして元に戻して、シート削除。
s/shift+*/ctrl+*/
>>455 それ、他Bookか追加シートで処理するより、CSVに吐き出して外部ソートするコード書く方が大変だろw
いちいち
>>439 みたいなことしてんの?馬鹿じゃね?
>>455 にとってExcelは不便な道具なんだね。
デュアルモニターで監視されててソート機能すら使ってはいけない。
かわいそう。
465 :
455 :2008/04/30(水) 21:39:55
クリップボードにコピーしたらその内容を直ちに削除する常駐ソフト(サービス)が 立ち上がっているような職場です! 好きでやっているわきゃないでしょ
死ねよpgr
>>465 じゃあセルの内容を別シートにコピペするVBA作ったら?
素人が変なソート組むよりそのほうがよっぽどいいよ。
これからも後出しの条件がどんどん出るよ お楽しみに!
これはひどい(この板で今日二回目)
470 :
455 :2008/04/30(水) 21:50:00
ま、ガンバって下さい。期待してます。
>>455 order byとかASCとか生意気なやつだ。
イラっとする。
うぁぁぁぁぁ
ちょっと待て、「歴史」と「社会」でわかれてるが、「社会」ってなんだよ?w
474 :
455 :2008/04/30(水) 21:56:00
ちんちん
でもVBAでCSV書き出すのは可って意味わかんない 馬鹿じゃないの
どっかの学校か塾の先生かなんか? レベル低すぎーw
>>443 が何がバカかというと,複雑な条件のソートには独自のアルゴリズムが
必要とか思ってるところ。
なんか可哀想だな 生徒が
何の先生だろ。 数学じゃないことを願う。
480 :
デフォルトの名無しさん :2008/04/30(水) 22:47:11
プログラミングだろ んでなんでそこまで先生がむきになってるのか、更におまいらが叩いてるのかがわからんよ おまいらの脳内モジュールにスルー判定のアルゴリズム追記しとけ んで、ソートコード出来た?
必死すぎる先生のキャラがおもしろいからだよ。 VBA使ってることをなんとか正当化したいんだね。 VBAでソートを組むはめになるやつには何か大切なものが欠如している。
結局話の流れは、
>>455 のお題を手作業でやる方法を示せってことなの?
スレ違い
いや板違い
そんなに触っちゃダメなデータならソートして並べ替えちゃうのもダメなんじゃないかな。
>>424 ArrayListのToArrayでキャストするにはどうですればいいのでしょうか??
流れが意味不明だ
>455 ファイルをデュプってODBCのExcelドライバをADO経由して開いて、 あとはそのままクエリ書けばいいじゃん。
飽きた
490 :
455 :2008/05/01(木) 01:16:53
>>488 大変よくできましたね。通信簿は5をあげましょう。
しかし内申書では「粗暴/凶悪。将来犯罪者になる可能性あり」を書いときます。
これが最後のレスです。
>>474 は455ではありません。
以降の455のレスは別人になります。
455がんがれよ じゃーの
一般人にも分かるようなExcelだけで完結する操作を期待していた俺には 488はちょっと期待外れだった。お題は確かに満たしているけど……。
>>490 頭おかしいのか?
VBAなし&クリップボード使用なしでどうやるかっつー話だろ?
あ、そーか、10段階の5か。
逃亡宣言した頭おかしい奴のお題とかどうでもいいよ
>>455 のお題を翻訳すると「Excelを使わずに成績表を並べ替えなさい。」ということだろう。
秋葉原のソフマップに5万円落ちてますとか言い出しそうだ
ちょっと見ない間に随分賑わってたんだな
499 :
デフォルトの名無しさん :2008/05/01(木) 16:28:20
ソート問題は暑いな
500ゲト
501 :
デフォルトの名無しさん :2008/05/01(木) 17:47:17
なかなかに香ばしいな 最大値を抜き出して、最小値から1づつ増加、判定合致したものから格納じゃだめなの? 場合に依っては死ぬほど重いけど
>>501 なんだそりゃ。
お前自身が香ばしすぎるぞ。
503 :
デフォルトの名無しさん :2008/05/01(木) 17:53:35
バルブソートがいいな。
504 :
デフォルトの名無しさん :2008/05/01(木) 17:59:48
だから、シートに展開しろと何度言ったら・・・(,,゚Д゚)
505 :
デフォルトの名無しさん :2008/05/01(木) 18:02:21
香ばしいって言うと怒る人いるよね。 これからはクリスピーって言ったらどうかな。
506 :
デフォルトの名無しさん :2008/05/01(木) 18:04:29
みなさん食いつきが良いですね
クイックソートが一番最適で、そんなこともわからないから 自前でちゃっちゃと用意することもできずに、こんな不毛なやり取りしてるあたりが やっぱVBAスレって感じでいいね(プゲラオプスwwwwwww
クイックソートが最適・・・(笑
クイックソートを笑って逆に自分の無知ぶりを晒けだしてることにすら気づいてないあたりが やっぱVBAスレって感じでいいね(ゴルバチョフwwwwwwwwww
C の qsort とか純粋なクイックソートでまず実装されてないだろwww
そもそもなんでエクセルでソート書いてんだよ。
それはさておき、ソートプログラムを売る人じゃないんならクイックソート
を実装できる程度でもじゅうぶんだと思う。
>>501 のはさすがにひどい。
プゲラとか懐かすぃ
510 は逃げ帰ったようだな
515 :
デフォルトの名無しさん :2008/05/01(木) 20:12:31
クイックソートはスレ違い
すみません初心者ですがマクロの記録をやってるんですが、おもしろいですね
>>516 VBAの正しい楽しみ方だね。
ここの先輩たちのようなソート作るようなバカにはならないでね。
518 :
デフォルトの名無しさん :2008/05/01(木) 21:37:32
dim a as integer で、空白セルの値が代入されたとき if a="" then では型不一致となるのをどう書いたらいいですか?
519 :
デフォルトの名無しさん :2008/05/01(木) 21:39:30
バルブソートが一番だよ。
Excelの並べ替えの機能を使ってあげろよ。
>>516 それがVBAの自慢できるところだと思う
初心者に優しい
523 :
デフォルトの名無しさん :2008/05/01(木) 23:09:36
>>518 あとは格納の段階で型不一致を監視して弾く
くりすぴーな501ですがクイックソートってなんですかわかりません〉〈
直訳するとはやぶさの剣かなにかで
先生教えて〉〈
並び替えアルゴリズムの一名称 ネットにvisual basicのコードいっぱいあるよ
>>523 教養としてクイックソートくらいは知っておいたほうがいい。
勉強のためにVBAで組んでみるのもいいかもしれない。
でも仕事では使うなよ。VBAでソートなんてアホのやること。
>>525 VBAじゃなくても、自分でソートのコード書くことなんてほとんどないだろ
>>526 VBA使いはソートばかり書きたがるだろ?
まあソートプログラムなどネットで買い物するぐらい簡単なんだけど おじいちゃんとかは発狂するかもねw
>>528 簡単なんだから作っても誰もほめてくれないぞ。
だからネットで落とせると言ってるだろおじいちゃんw
>>530 そうか?伝わらなかったな。
「ネットで買い物する行為と同じくらい簡単な事だ」と言ってるのかと思ったよ。
>>531 発狂するなよ
おじいちゃんには難しいかもしれんがw
>>532 そうか。そうか。
おすすめのソートはどれだね。
>>533 毎度馬鹿の一つ覚えの純粋クイックソートです。
要素数少なくても馬鹿の一つ覚えのようにクイックソートします。
要素数によって分岐するなんて発想はありません。
おすすめのソートってネットで特徴ひけるだろw そんなんで勝ち誇りたいなんて能無しで誰にも相手にされない 頑固じじいといっしょだねww
プログラマーに劣等感抱いてるのがいるな
おや?ソートをダウンロードする話じゃなかったのか?
職場で嫌な事でもあったんだろ
ソートをダウンロード((≧m≦)ぷっ! 身近の目上の人が 「並び替えをダウンロードしろ」 とか言ったらもう馬鹿にされまくりで 誰も相手にしない
なんだ、このスレ
所詮VBAスレだしキチガイが湧いても仕方が無い
最近の若い子とは話が通じないな。 まあいい。どんなアルゴリズムでもいいんだ。アルゴリズムの話をしたいんじゃない。 エクセルでソート自作してなんの意味あるんだということを言いたい。
何を当たり前の事を自信たっぷりに言ってるんだ。 分かって遊ばれてるだけだというのに。
難しい連中だな。
>>544 当たり前と言うがこのスレ見てると本気で心配なやつがちらほら…
>>418 を見る限り、既に、本流は解決している件
会社とかで使うブックの場合やはり余り凝らないほうがいいと思う。
ちょっと格好わるくてもVBAでやったほうが無難かも。
情報セキュリティにうるさいDB屋の圧力があるからね。
あんまり凝ったことして得意になってると、Excelブックを一種の
アーカイブファイルとして扱い主要処理はDBでやれという動きが加速してくる。
殆どのブックは実際物置としての価値しかないんだが、一部有効に使われた
ブックには、核廃棄物のように再利用不能な割に流出すると有害なもの
が含まれてる場合がある。やっかいなことにちょっと凝ったスマートな使い方
をすると何でもないデータからそういうのが生まれることがある。
虫が湧くって感じ。
だから最近は
>>443 の例のように、凝った使い方を一切禁止するブックを
物置として扱うことが強制され、かつてはExcelで簡単に出来た処理もわざわざ
固く重く扱いにくいRDBの上でやれと強制される最近の傾向はそれが原因
してる。(単にDB屋の陰謀だという説もあるが)
ではちょっと凝った使い方をしたのを、「ムック」と呼ぶ事にしよう。
ExcelVBAでお手軽に出来ることをRDBに持っていくと、やたらと工数が掛かる。 外部に出すと、鼻クソみたいなデータ処理でも平気で3人月とか見積もり出てくるし。 それに、RDB使うなら業務の標準化から始めないと不毛になりがち。 ま、何ごともほどほどに。
>>549 凝らないほうがいいならなおさらVBAは使わないほうがいいじゃないか。
「セキュリティにうるさいからVBAが無難」←なぜ?
「流出すると有害なブックがある」←当たり前。
おまえ
>>443 だろ。
>>551 >それに、RDB使うなら業務の標準化から始めないと不毛になりがち。
ますますRDB使いたくなるぞ。
おまえ
>>443 だろ。
554 :
デフォルトの名無しさん: :2008/05/02(金) 08:29:42
RDBってなんですか?
555 :
デフォルトの名無しさん :2008/05/02(金) 09:03:58
レッドリボン軍
556 :
デフォルトの名無しさん :2008/05/02(金) 09:06:47
557 :
デフォルトの名無しさん :2008/05/02(金) 11:54:43
>>525 そっか
ありがとう
配列内容をソートするのがうんたらって質問が出たからじゃない?
〉なぜ
558 :
デフォルトの名無しさん :2008/05/02(金) 12:06:39
でもぶっちゃけ、ちょっとVBA使えるようになるとちょっとしたモン作りたくなるよね? そういう時に手を出しがちなのがソート関係じゃない? ええ、その昔、俺も組みましたよ、クイックソート 懐かしい、結構みんな通る道なんじゃないの?(俺だけか)
560 :
デフォルトの名無しさん :2008/05/02(金) 13:49:54
アメリカじゃ馬鹿なことやって、みんなに迷惑かけるやつに限って成功したりするもんな。
561 :
デフォルトの名無しさん :2008/05/02(金) 14:23:15
そうそう、派手なフォーム作ったりな
562 :
デフォルトの名無しさん :2008/05/02(金) 15:11:05
なんかやりたい気持ちはわかるんよ。 派遣で就いた職場で社員から、手作業でデータを加工する仕事をまかされて、あまりの能率の悪さと面倒くささで しかもミスると怒られるからVBA使って一発で加工するマクロ作ったらなぜか気味悪がられるようになった。 それからというもの、プリンタが止まったり、PCに何かエラーがあると全部俺が疑われるようになった。
>>549 Excelブックが物置?
やっぱり455の言う事は意味がわからんな
566 :
デフォルトの名無しさん :2008/05/02(金) 17:05:34
>>564 いや、あまりにも周りが無知過ぎていつか自分にもチャンスがあるんじゃないかと思って辞めれない・・。
もう少しレベルの高いとこだと使い物にならない実力だし。
そんな態度だから苛められるんだろうなぁ。
ニュータイプを恐れる者たちの気持ちがわかっただろう
569 :
デフォルトの名無しさん :2008/05/02(金) 17:58:12
人をモルモットみたいに……
570 :
デフォルトの名無しさん :2008/05/02(金) 18:23:09
ついにねんがんのアイスソートをてにいれたぞ
571 :
デフォルトの名無しさん :2008/05/02(金) 18:26:31
どう考えても手作業の方が早いのに、 「マクロでやれ、VBAでやれ、そうしたらスグできるだろ?○○分後までに終わらせろ」 って、何も作業の中身を見ずに、マクロ・VBAを使えば どんな作業でもスグに終わると信じ込んでいる上司に 困ったことはあったな。
職場によるだろ。同じ派遣でも。
>>562 の職場は、多分シートのミス入力チェックする担当者の仕事が無くなって
立場無くなるから顰蹙を買っただけだと思う。
一般的にはシートに妙な参照や糞数式とか条件付き書式とか使ったトリッキーな
シート作るほうが顰蹙を買い易い。
VBAのコード(特に日本語だと喜ばれる)置いておく(組込んだままには
しないでテキストに落として、ブックに埋め込む)ほうが喜ばれる。
>>572 >VBAのコード(特に日本語だと喜ばれる)置いておく(組込んだままには
>しないでテキストに落として、ブックに埋め込む)ほうが喜ばれる。
なんとなくコードっぽい日本語。
>>573 毎回コードをエディタにコピーしてから実行するの?
なんかめんどくさそうなんだけど。
どんな処理するVBAなん?
アドインじゃだめなん??
mscorlib.SortedListって便利だな。
まぁ、パソコン販売の「ソーテック」の名前の由来が 「ソートテクニック」だからな。
・・・
579 :
デフォルトの名無しさん :2008/05/02(金) 22:12:33
またソートか じゃあ反対に、考えうる限りギリギリ使えるレベルの、最悪のソートコードだれか考えれ
ソートの話をするやつはそーっとしとこ。
>579 ボゴソートでもVBAで実装する話?
ソートはもういいから次
ExcelやDBには本来ソートなんて概念はない。 以上基地外の発現でした。
Excel2003しか持ってない(Accessを持ってない)俺が、 七万個の要素を昇順で並べ替えたい時にはどうすればいいですか?
Accessを買う
Excel2007を買う
手作業でやる
>>585 その七万個の要素はどんな状態にあるの?
csvなりのフォーマットに落ちているなら、sortすればいいだけだが。
つ[man sort]
ちょっと疑問に思ってsort /?してみたら、固定幅ならsort.exeでも特定カラムをキーにソートできそうね。 unix系のsortにしても、テキストに落ちている必要はあるけど。
>>593 1シートずつ別々のcsvファイルに落として、二つのcsvファイルをまとめてsortでOK。
cygwin使うなり、Linuxをリモートで使うなりできるなら、出力を二つのcsvファイルに分けるところまでできる。
そうでないなら、それこそVBAで分割して読み込むって処かな。
いずれにしても、自分でソートを書く必要はないわけで。
どうしてもVBAでやるなら、各シートをそれぞれソートしてからマージソートかね。
テキストファイルの分割ごときでそんなご大層な
596 :
デフォルトの名無しさん :2008/05/03(土) 10:53:09
70000の配列に値を入れて、ネットでソートプログラムを 探して、並べ替えればいいのでは
>>594 サンクスコ
具体的にどういう手順でやればいいの?
聞いてばっかでゴメソ
>>596 ソートのコードがいるんだね
599 :
597 :2008/05/03(土) 12:20:03
確かにスレ違いだね 助言してくれた皆さんありがとう あとは自分で何とかしてみるよ
>>562 せっかくVBAで仕事が早く終わるようになったのなら
仕事してるふりしてネットでも見てなさい
ちょっと時間がかかっていいなら・・・ 1. Sheet1, Sheet2をExcelの機能でソートする 2. Sheet1の10,000行目のソートキーを区切りにして、そこより上をSheet3に、下をSheet4にコピー 3. 2で使ったソートキーの場所を見つけ、そこより上をSheet3, 下をSheet4にコピーする 4. Sheet3, Sheet4をそれぞれExcelの機能でソートする Sheet1を10,000行と25,000行にまず分割するので、Sheet2の内容がまるごとどちらかに追加 されてもSheetの行あふれは起こらないというのがミソ。
あ、3は「Sheet2の中で」というのが抜けてた。
ArrayList使え。
604 :
デフォルトの名無しさん :2008/05/03(土) 17:25:16
ご助言をいただきたいのですが、下記のようなマクロを作成しております。 1.幾つかボタンがあり、ボタンを押すとボタン名のシートが追加されます 作成されたシートに任意の数字を入力しそのシート内でそれが合計されます 2.次に集計用のシートに1で集計した数を貼り付けます。 3.これを追加されたシート分繰り返す。 という処理をするマクロを作成中なのですが、 ・追加されたシート分だけコピーするという条件(左から2番目のシートから処理をはじめ シートの右から2番目まで繰り返すというのを考えています と ・集計しコピーしたものを集計用シートの前回貼り付けたセルの横に貼りつけ をどのうように組めばいいのか思いつきません…。 ボタンの数は全部で7つで最高増えるのが7シートなので、 最初から7つのシートを作成しその集計を集計用のシートに貼りつけするのは できるのですが、そうすると使わないシートまで作成することとなるので出来ればそういう ムダを省きたいと思い上記のような事を考えました。 なにか改善策やヒント等ございましたらご教示の程お願い致します。
Dim i as integer For i = 2 to Worksheets.Count -1 Worksheets(i) に対して処理 Next こんな感じでどうでしょう
VBAとセル間リンクを駆使したExcellentなExcelの使い方をしたければ LANカード抜いたPCでやったほうがいい。USBメモリで外部データとの やりとりをする。 ネットやLANに繋がってる環境でVBAを使うとDLLアクセスとか 出来るんで、ネットにデータ流出してるとかしてないとかDB屋が騒ぎ だす。今やネットやLANに繋がってるPCでExcelやAccessでVBA使う時 は管理者許可がデフォになってるね。 ソートで騒いでいるようだが、DBもExcelもソートは実は余り得意じゃない。 ソートしないで済むようにデータを入れていくのがキホン
自分の職場環境がデフォだと思うなよ
>>606 VBAかLANかと言われたらLANを選ぶ。
あとそれからエクセルとアクセスはソートが得意。これ豆知識な。
本当に豆な知識だ
>>606 たかが成績表の並べ替えに面倒なやつだな。
>>606 >ソートで騒いでいるようだが、DBもExcelもソートは実は余り得意じゃない。
>ソートしないで済むようにデータを入れていくのがキホン
ちよ、ちょっと。そんな馬鹿な。DBやExcelはツールであって得意じゃないのは使う側の能力がかなり影響するでしょ?
ソートしなくいで澄むようにデータ入力って・・・そんな馬鹿な・・・
>>606 ソートしなくて済むようにするにはデータをどうやっていれるんでつか?
入力前にあらかじめデータをソートしておけばいいだろ
なんか香ばしいやつがいるなぁ
>>606 お願いがあります、
頼むからコテつけて下さい
ヒント:NGワード DB屋
619 :
デフォルトの名無しさん :2008/05/03(土) 22:16:25
なんか微妙に、最近のExcel総合相談所と、雰囲気が 似てるな。あっちは、707だが
Excel総合相談所で「ソートを自作するやつ」という笑い話を聞いたことがある。 あくまでもVBAでバカなことやろうとするやつへの戒めであって、本気でそんなことするやつはいないからこそ成立するギャグだった。
>>604 本当にやりたいことはなんだろう。シートを出したり引っ込めたりすることなの?
優先順位が簡単にわかる世界って お子ちゃまの世界のこと?
>>623 優先度が簡単にわかることとお子ちゃまとにどんな関係があるのやら。
やっぱり病気だな。
>>623 お子ちゃまの世界や極端な大人の世界では、優先順位は
簡単にわからないぞ。
2つのものを比較できるかどうかすら怪しいからね。
2つのものが比較出来るのが自明というそんじょそこらの
大人の世界は、もしかすると非常に幼稚な世界かもしれないぜ
その幼稚園の主役がExcelやAccessだったりするから悲
しいものがあるが。
愛こそが最優先
627 :
604 :2008/05/04(日) 13:22:19
>605 ありがとうございます! データを会社においているので、試すのは明日しようと思いますがそれで上手く いけそうな気がします! セルのコピーについてはかなり強引ですが、 集計した1セルごと行数分(57行あるのですが・・・)コピーして貼り付け だと次のシートの集計をしたとき貼り付けも隣の行(セル)に上手く貼りついてくれたので とりあえず結果オーライです。 まだまだ覚え始めなのですが、このスレを見ながら少しずつ色んな考えを持てるようにしたいと思います。 ありがとうございます。
複素数ですら大小比較できないってのに。 比較できるのが自明なものなんて限られてるわ。
>>628 ベクトルは大小比較できないと思ってる?
>>629 グローバルには標準化できないだけで、恣意的に決めればローカルには定義できるだろ?
大小関係の比較が難しいというのは、次のようなソート問題
大人n人子供m人のM個の家族がある。(当然家族ごとにn,mは異なる)
それぞれ別のM個のホテルに泊まるとする。
それらのホテルは、一般的に大人、子供の宿泊料金が別(常に半額というわけでもない)
シート1の各行にはホテル毎の料金表(大人・子供)
シート2の各行には家族の大人・子供人数があるとする。
シート1の1行に記載されてるホテルにシート2の1行の家族が泊まるとする。
シート2の行を並べ替えて、宿泊料金の総和が最も安くなるようにソートしろ
というような問題
これはエクセルだろうがDBだろうが難しい。ソートの専門家向けの問題。
「車輪の再発明」なんて、小馬鹿にした慣用表現は忘れろ
恣意の意味が分かってない件
普通それを「ソート」とは言わない件
反恣意的に決めてほしいものですな
>>630 のソートって難しいの?
超簡単に見えるけど?
>>634 だよなあ。VBAなんぞまったく使わずに集計&ソート可能。
ソートの専門家向けの問題だって。おもしろすぎる。車輪の再発明の現場を目撃したよ。
>>630 ベクトルをグローバルに標準化はできないけど、恣意的に決めればローカルには定義できる。
つまり大小比較できるの?できないの?もっと詳しく説明してほしいな。
おまいらもう許してやれよ
639 :
デフォルトの名無しさん :2008/05/04(日) 19:33:43
車輪の再発明と聞いて、すっとんできますた。
負け惜しみも沸いてきたみたいんだな(ワクワク
ローカル = 丹沢周辺
>>628 複素数の並べ替えすらできないバカがVBAでどんなことやってんだよ。笑わせんな。
思いっきり馬鹿にされそうだが
>>630 をVBAなしでやる方法が分からない・・・
集計はともかく、順列組み合わせをシートに吐き出す部分だけはVBA使わないと苦しくないか?
試しに6家族でやってみたが720通り(6の階乗)の組み合わせをVBAで実際に書かせないと
俺の腕では最小値が見つけられない_| ̄|〇
9家族以上になったら1シートにおさまらないし
VBAばっかり使っててExcelの基本機能に無知なせいかもしれんが
誰か答えプリーズ!
総和がなんでソートで安くなるんだ
>>643 VBAばかり使っていると壁にぶつかるよ。一度離れて基礎的な勉強をしてほしいな。
組み合わせ最適化問題は難問で昔からいろいろ研究されています。ソルバー機能について調べてみて。
>>644 組み合わせ最適化問題は地獄の1丁目でつ.入門は慎重に.
( ´_ゝ`) ふーん・・・そうかい
>>644 例えば大人が10人子供が1人の家族Xと
大人が1人、子供が10人の家族Yが居たとする。
Aホテルでは大人料金は10000円、子供料金は2000円
Bホテルでは大人料金は5000円、子供料金は3000円とする。
XがAに泊まりYがBに泊まる場合→102000+35000=137000円
XがBに泊まりYがAに泊まる場合→53000+30000=83000円
泊まらせ方によって結構差が出るだろ?
あー・・・ という事は、それぞれの家族がどのホテルに泊まれば 一番安いかってことかね。
ソルバーかなーとおもったけど、親子の数がセットで移動させないと いけない、という制約をどう実装すればいいのか思いつかない
答えは複数ある可能性あり。Mが大きいと、答えが異常に多かったりする。念のため。
てか、勝手に家族離散させるな
組み合わせ最適化はおもしろい問題だけど、Excel使ってる人が現実に解かなければならない場面はほとんどないだろう。 ホテル選びの例題だって実際にはあり得ない人工的な状況設定だし。
そしていざ解かなければならないとしても規模が小さければソルバーで解けてしまう。
それじゃソルバーで解けない場合はどうするのか?
VBAで組むのだろうか?
>>630 はどうするつもり?
655 :
デフォルトの名無しさん :2008/05/05(月) 15:05:10
>>653 >Excel使ってる人が現実に解かなければならない場面はほとんどないだろう。
その考え方は殆どExcelをExcelとして使っていないから出てくる考え方だな
まぁいい。本来Excelなどをまともに使いこなせるのは200年以上の人生経験(☆比喩)
が必要な世界だからな。
Excelは RDBというリアルタイム志向でアブソリュートな情報の作成ツール
を補佐するツールとして使えばいい。
>>630 の問題で言えば、
最小コストと最大コストの推測、コストの分布の概略を掴む。(これを完全にやるのは
まぁ無理だろう)
これにより価格体系や家族構成に問題があるかないかを推測し、交渉する材料とかに
するわけだ。
価格体系や家族構成の分布が悪いと、家族間や家族対ホテルで殺し合いが発生して
双方共に絶滅する可能性すらあるからな。
双方を双方の価値観を厳格に固執する態度じゃリアルタイムには問題は解決しないという
前提に立つのが賢い。
>>656 例えば客の家族構成に問題がある場合はどのような解決手段がある?
>>656 君が組み合わせ最適化問題に興味を持っているのはわかった。
そして今の今までそれを専門家向けのソートと呼んでいたこともわかった。
パソコンなんだから全通り計算させたらしまいだろ
661 :
デフォルトの名無しさん :2008/05/05(月) 17:22:14
>>656 >最小コストと最大コストの推測、コストの分布の概略を掴む。
最適化手法からそのような結果は出てこない。
662 :
デフォルトの名無しさん :2008/05/05(月) 17:24:43
>>659 基本的にはその通りなんだが、けっこう大変なんだぞ。
>>658 組み合わせ最適化問題はどこにでも付きまとう問題で
>>630 のような問題は、その一つの例
興味を持たないで済ませられる人は余り居ない。
抽象化したら同じになるけど、問題が余りに広範なんで、
問題毎に使える手法に制限に色々とバリエーションが
出てくるので、問題毎に専門分野を作ってる
抽象化すれば
>>630 に類する問題をまともに扱っている
人はその道の専門家でいいんじゃないの?
そもそも一般人と専門家って両立する概念なんだから。
>>630 と似たような感じの問題で、数理計画とか線形計画、GAの専門家なら聞いたことあるが、
ソートの専門家ってのは聞いたことないな。
>>663 組み合わせ最適化問題を解くことは非常に有益だし、興味ももっています。
しかし考えてみてください。
>>630 書いてるやつは
>>443 なんですよ。
666 :
側近中の側近 ◆0351148456 :2008/05/05(月) 18:08:01
(っ´▽`)っ テーブルを作って、その直積(デカルト積)を求めて、 ソートすればいいのでは? とレスをあまり読まずに言ってみましたが何か?
670 :
側近中の側近 ◆0351148456 :2008/05/05(月) 18:29:13
|▽`)っ 全て(っ´▽`)っの自作自演だったらどうする? ID無しの板っていいよね☆自作自演し放題で。 |彡☆
そんなセンスねーだろよ。
672 :
側近中の側近 ◆0351148456 :2008/05/05(月) 19:41:29
>>671 (っ´▽`)っ
ある!
(っ´▽`)っは最高20人同時演出可能。
たまに自分のレスだと忘れて、そのレスにマジレスしてしまうことがある。
自分でも勘違いするぐらい、騙されるぐらい自演が美味い。。
頭の壊れた奴が住み着いてすっかりスレが腐ってしまった
>>673 貴方をはじめ>All except
>>443 etc の腐ってない新鮮な
頭脳が残っただけが救いだと思おうよ
>>674 めでたいやつだな。
複素数の並べ替えはできたのか?
676 :
デフォルトの名無しさん :2008/05/05(月) 20:25:30
ソートの専門家 の検索結果 約 111,000 件中 1 - 10 件目 (0.14 秒)
>>674 >>630 ベクトルをグローバルに標準化はできないけど、恣意的に決めればローカルには定義できる。
つまり大小比較できるの?できないの?もっと詳しく説明してほしいな。
674と630をどうしても結びつけたい頭の腐った人が居るようでつね
680 :
デフォルトの名無しさん :2008/05/05(月) 22:46:09
教えてください。 ブックAに「計1-A」、「計1-B」、「計2-A」、「計2-B」、というシートがあって、 VBAで 「計1」と名をつけた新しいブックを作り、「計1-A」、「計1-B」をそこにコピーする、更に「計2」も同様に・・・ というのを一連の操作で行いたいのですが、 新しいブックの名前をどうつけてやったら良いのか分かりません。 sheets(Array("計1-A", "計1-B", ).CopyではただのBook1に保存されてしまいます。ぜひ名前をつけたいんですが、どうすればよいのでしょう ご教示願います
ファイル名とブック名を別にするのにはどうすればいいでしょうか?
>>676 "ソートの専門家"の検索結果 2 件中 1 - 2 件目
両方とも、このスレwww
saveas
>>682 ソートの専門家は種類が多過ぎてもはや専門家とはみなされてないだけだろ。
昔48種に大分類されたらしいが、その後もでるわでるわバリエーションの山。
分類プロジェクトは頓挫中。
ソートくらい奥深い世界は無いみたいだ。たかがソート、されどソート。
NSPを解くのも、ソートの専門家なのか?
ソートなんてクイックソート+選択ソートで実装すればまず困る事は無いわ。
しっー そーとしておけ
場合によってはバケツソートを使えないようでは ソートの専門家とは言えない。
>>684 もはや何を言いたいのかよくわからんが、今や専門家と看做されてないなら、
「ソートの専門家」じゃないだろ。
>>688 え?アルゴリズムが違うと、結果も違うのか?
「専門家」なら、バケットソートって言うだろ、JK
>>691 専門家はそんなくだらない事より本質を重要視する。
いいかげんにしとけよ
695 :
デフォルトの名無しさん :2008/05/05(月) 23:51:17
頭の中をソートしてくれ
それはやめといたほうがいい てか、上げるなよ
697 :
デフォルトの名無しさん :2008/05/06(火) 00:14:14
専門家以前に人としてバルブソートだろ。
このスレのレスを、くだらない順にソートせよ
専門家がいるのなら本の一冊や二冊出してるだろ
ソートの味方くらいでいいんじゃね
ソートに味方も敵もあるかよ 番号が付いてる限りソートされていると感じる 脳みそにとってはな
702 :
デフォルトの名無しさん :2008/05/06(火) 11:43:51
グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー
703 :
デフォルトの名無しさん :2008/05/06(火) 13:31:48
近未来と近過去 熱い場所だ 担当者ご苦労さん
ここはなんのスレ?
706 :
デフォルトの名無しさん :2008/05/06(火) 20:39:34
ソートの専門家専用スレです。
その名はExceler
708 :
デフォルトの名無しさん :2008/05/07(水) 02:11:55
なんで自演とかを気にするんだおまいら?
ところで
>>630 よ。うまくソートできたか?
わしはできたぞ。
正確に言うとソートじゃない。最適な組み合わせを求めたということ。
710 :
708 :2008/05/07(水) 09:20:21
M=1000の時でホテル代の価格の組が全部異なり 家族構成も全部異なる場合で実例が出てくるまで 誰も信じないと思う。本当にソートされてるのか も示せないとな。
>>711 M=14まででお願いします。ソルバーの制限で200変数までしか扱えないから。
ただしM=14の時に現実的な時間で解けるかどうかわからないけど。
それからソートと呼ぶのはやめないか?
713 :
デフォルトの名無しさん :2008/05/07(水) 12:40:47
最適組み合わせの問題って、ノーベル賞クラスじゃなかったか?
>>713 このスレからノーベル賞受賞者が(・∀・)ワクワク
>>709 がウソつき扱いされているみたいだな。不思議な話だ。こんなのできて当たり前なのにね。
前から思ってたんだかこのスレに出入りしてるやつら中学生が多いだろ。
レベル低すぎて話にならん。せめて高校出てからデビューしろ。
716 :
デフォルトの名無しさん :2008/05/07(水) 15:16:37
中学生が高校生に、受験の答え教えてくれって頼む、そんな主旨のスレだからだと思う
'''八島 良太'''(やしま りょうた、[[1975年]][[11月8日]] - )は[[埼玉県]][[さいたま市]]出身の[[ウィキペディアン]]。 [[ウィキペディア]]でのアカウント名は[[User:Yassie]]、[[2ちゃんねる]]では◆sMt4YbtR06という[[トリップ]]を使用。 Nanassieというコテハンを使っていた時期もある。身長171cm、体重75kg。さいたま市[[大宮区]]在住。独身。 好きな歌手は[[サラ・マクラクラン]]、好きな女優は[[メグ・ライアン]]。 [[User:Aphaia]](本名・木津尚子)や[[User:Mikihisa]]や[[User:NiKe]]や[[User:掃除屋ケンちゃん]]との死闘で知られており、 現在は[[User:Haruno Akiha]]や[[User:WhiteWing]]をウィキペディアから追放すべく策動を続けている。 ==経歴== [[埼玉県立浦和高等学校]]を経て、[[国際基督教大学]][[教養学部]]社会科学科に入学。学部時代は [[オハイオ州立大学]]に交換留学し、[[経営学]]を専攻。オハイオ州立大学への編入を望み、願書はほぼ完成していたが アジア経済危機の煽りを受けて学費を工面できなくなり、相思相愛の恋人をアメリカに残したまま、[[1999年]]、日本に帰国。 のちに当時のことを振り返って「精神面は相当荒れてたね」と語った。[[2000年]]に国際基督教大学を卒業して 外資系企業に入社し、[[英語]]を使用した事務的な職務を担当。[[2004年]]、Excel2002VBAスタンダードに合格。 [[2005年]][[12月27日]]から[[ウィキペディア日本語版]]で北米の地理に関する記事を翻訳・投稿。今日に至る。 私生活では、失恋の傷を忘れるため、[[1999年]]から[[ダンスダンスレボリューション|DDR]]に熱中し、 新宿チルコポルトや大宮タイトーインに出没していたが、自惚れの強さと事大主義ゆえに諸方の反感を買い、 2000年頃には撤退を余儀なくされた。 {{people-stub}} {{DEFAULTSORT:やしま りようた}} [[Category:インターネットの人物]] [[Category:埼玉県出身の人物]] [[Category:デブ]] [[Category:日本のダンサー]] [[Category:1975年生]]
14*14=196 15*15=225 >200 つまりLPですね。よくできました。
OS:winXP excel2000 VBA実行中に、ユーザにいったん制御をもどして、シート上の特定範囲のセルをクリック。 そのクリックをトリガーに処理再開。 というような事をしたいのですが、どうすれば実現できるかわかりません。 良い案やヒントないでしょうか・・?
セルに対しては通常のクリックは検出できないと思うので、右クリックかダブルクリックのイベントを検出する どうしてもクリックがよい場合はクリックイベントを検出できるもの(ボタンやシェイプ)を追加する
>>720 コメントありがとうございます。
BeforeDoubleClick
SelectionChange
とかを使えば良いのかなあとは思ってました。
引っかかってるのは、「VBA実行中に、ユーザにいったん制御をもどして」のところなんです。
中断前の変数の状態を保持したまま、いちどユーザに制御を戻して、シート上のセルを(ダブルor右)クリックでVBA再開。
つまり
@自分の番になったら一枚ツモってきて
Aいらいない牌を手牌の中から一枚選択して(シート上のセルをクリックして)、
Bすてる。
ってことをしたいんですね。
@まではVBAで処理して、Aの動作はシート上のセルをクリックすることで選択して、
BからはVBAにまた処理を戻す。
・・・自分の実力じゃ無理かな・・・orz
>>721 セルを使わずに、全部ボタンをはっつけてしまったほうが楽なんで内科医?
723 :
デフォルトの名無しさん :2008/05/07(水) 18:51:17
フォームとボタン使えば?
そーですね・・。 cell_雀みたいなの作りたかったですが、あきらめようかな。
725 :
デフォルトの名無しさん :2008/05/07(水) 20:39:11
フォームを作成してデバッグ作業をすると、エラーが出たときにコードが表示されずに フォーム画面が出るため、どこの行でエラーが起きてるのかわかりません。 解決方法ご教授願います
ところで
>>630 はホテル料金の計算できたのか?
>>656 >その考え方は殆どExcelをExcelとして使っていないから出てくる考え方だな
なんていうくらいだから当然できたんだろうな。
>>719 こんなのじゃだめ?
Do While Len(ActiveCell.Value) = 0
DoEvents
Loop
728 :
デフォルトの名無しさん :2008/05/07(水) 23:44:06
Excelツールのテストを自動化したいと考えています。 別Bookのフォーム上のテキストボックスの値を取得する ことはできますか? ツール側に関数を作ればできることはわかったのですが、 できればツール側に修正を入れたくないです。 ヒントお願いします。
729 :
デフォルトの名無しさん :2008/05/07(水) 23:56:17
エクセルツールのテストって一般的な言葉?
「Excelで作成したツールのテストを自動化したい」だから俺は別に違和感ないけど・・・
んなことより、
>>728 は無理じゃないのかなぁ?
フォームをキャプチャ→画像解析→テキスト取得とか?ごめん、嘘・・・
732 :
デフォルトの名無しさん :2008/05/08(木) 00:32:01
728です。レスありがとうございます。 やっぱり無理なんですかね。 そもそも、MsgBoxとかもやっているので、どうやってOK押すかとか前途多難です。 みんな手でテストやってるのかな・・・。
>>732 Win32APIを使えば、OKボタンもAPIでクリックできるけど、より良い方法は、
テスト対象のメソッドでダイアログ入力待ちなどが起きないような設計にする。
とはいえ、どこかでMsgBoxを出さざるを得ないだろうから、そこはマニュアルテストとかかな。
>>728 の説明で回答できる人ってスゴイね
俺にはどっちがツールなのかすら分からないよ
735 :
デフォルトの名無しさん :2008/05/08(木) 08:30:10
そんなに誉めるなよ
いや実際、配列とか定数とか何に使うの?とか思ってる俺からしたら紙だ。
737 :
デフォルトの名無しさん :2008/05/09(金) 13:03:03
モジュールの自動削除って出来るもの?
738 :
デフォルトの名無しさん :2008/05/09(金) 14:48:45
自分は今セルをクリックしたら別のエリアに多行表示できるようにしたいと考えて。 例にすると セルをクリックしたら、そのセルについたコメント(7~8行ぐらい)の内容を A15に22R X 7C以上の範囲にそのコメント内容を載せる という物を作ろうとしてるのですが 全く、できず困ってます。 こういうのは可能でしょうか?
セルに表示されないデータを埋めこむってこと?ソートとかかかったらどうなるんだろ?ってかできるの?
ごめん、俺が今やりたいことを言ってしまった。で、できるの?3文字でいいからヒントください。
742 :
デフォルトの名無しさん :2008/05/09(金) 23:37:18
並べ替えた後、セルを特定することは普通可能 それはソート前にセル探すのとどう違うんだ と言うか、出来るように設定しておけばいいだけでわ
745 :
デフォルトの名無しさん :2008/05/10(土) 08:30:40
マクロにパスワードつけて触れないようにしたい。 どうしたらいい?
746 :
デフォルトの名無しさん :2008/05/10(土) 09:43:16
Function IsCommentCell(sAddress As String) As Boolean IsCommentCell = Len(Range(sAddress).NoteText) > 0 End Function Function GetFullCommentText(sRange As String) As String Dim sComment As String Dim iPos As Integer iPos = 1 While Range(sRange).NoteText(, iPos) <> "" sComment = sComment & Range(sRange).NoteText(, iPos) iPos = iPos + 255 Wend GetFullCommentText = sComment End Function 'コメント取得方法は分かったが 'それをA15に表示する方法がググレナイ… '例えば A1にあるコメントをクリックしたら(7行)A15以降にそのコメントが表示されて 'その後、B5にあるコメントをクリックしたら、A15に表示されたA1のコメントが消えてB5のコメントが表示できるようにしたい。 'どうしたら良いでしょうか?
747 :
デフォルトの名無しさん :2008/05/10(土) 10:07:09
連レス失礼 A1から12R X 11Cのどのセルをクリックしても そのセルについてるコメントを A15に表示させるようにしたいです。
748 :
デフォルトの名無しさん :2008/05/10(土) 10:55:14
>>745 VBEditorで
ツール→VBAProject-プロジェクトプロパティ
→保護タブ
→パスワードを入れる
>747 12R X 11C? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Target.Comment Is Nothing Then Range("A15").Value = Target.Comment.Text End If End Sub ?
750 :
デフォルトの名無しさん :2008/05/10(土) 11:44:56
751 :
デフォルトの名無しさん :2008/05/10(土) 11:50:35
あとは A15の縦の長さを 常時コメントと同じ高さにあわせるように応用するだけか・・・
752 :
デフォルトの名無しさん :2008/05/10(土) 12:04:27
A15の高さ=コメントの行数x18ピクセルになるマクロを組み込むには…どうすればええやろ。
いい加減、マクロの記録に気づけよ
754 :
デフォルトの名無しさん :2008/05/10(土) 23:53:59
ボタンのテキストをマクロで書き換える方法についての質問です。 フォームのボタンの場合は、 Dim s As Shape Set s = ActiveSheet.Shapes("Button 5") s.TextFrame.Characters.Text = "ほげほげ" のようにすれば書き換えられます。 では、コントロールのボタンはどのようにして書き換えればいいのでしょうか? 同じように書くと、s.TextFrame.Characters.Textの行を実行するときに、 オブジェクトは、このプロパティまたはメソッドをサポートしていません と叱られます。
EXCEL2003のVBAで、シートの再計算を強制的に実行するにはどうすれば良いでしょうか?
・資金ゼロでも優秀な開発者は一千万円の特別賞あり、デモトレードなのに優勝したら三百万円の賞金
●6月にマネージャパン、月刊アスキー、週刊アスキーの3誌が賞金総額2000万円の「シストレFXグランプリ」を開催
http://system-trading.jp/news/index.php?cID=3 [シストレFXグランプリとは]
クリック証券が提供するFXのデモ取引環境を利用して、システムトレードにチャレンジできるFX取引のグランプリです。
お客様ご自身で作成したシステムトレードの機能を評価する「シストレソフト部門」とトレード収益を競う「トレード部門」の2部門構成となっております。
●5月22日より登録受付開始、6月2日よりグランプリ開始の予定。賞金総額2000万円。
デモトレードの優勝者には賞金三百万円がプレゼントされます。
▼トレード部門
初期資産500万円で、デモ取引のトレード収益を競っていただきます。
●
http://www.fx-gp.com/about/ ▼賞金総額
■社長特別賞(シストレソフト買取価格) 10,000,000円
●シストレソフト部門賞 1位300万円 2位100万円 3位50万円
●トレード部門賞 1位300万円 2位100万円 3位50万円
●前期MVP賞 50万円
●後期MVP賞 50万円
757 :
側近中の側近 ◆0351148456 :2008/05/11(日) 11:02:55
>>754 (っ´▽`)っ
ActiveSheet.CommandButton1.Caption = "ddddd"
758 :
側近中の側近 ◆0351148456 :2008/05/11(日) 11:04:56
>>755 (っ´▽`)っ
Calculate メソッド
計算対象 指定例
すべてのブック Application.Calculate または Calculate
特定のワークシート Worksheets(1).Calculate
指定されたセル範囲 Worksheets(1).Rows(2).Calculate
>757 ありがとうございました。できました。 以下、俺様メモ。 VBAのオブジェクトブラウザを使って クラスSheetXのメンバをオブジェクト名(たとえばCommandButton1)で探すこと。 ボタンのクラスはCommandButton
>748 >→パスワードを入れる でけた。ありがと。
Dim StrData(1 To 13, 1 To 2) As Variant これってどういう意味ですか?
>>761 イメージ的にはA1:B13みたいな縦13*横2の二次元配列。
変数名からしてString型にした方がいいと思うが。
>>762 ありがとう、把握しました。
後、マクロを無効にしないとエディターで編集が出来ないんですが、これはどうすればいいんでしょう。
csvを読み込んで配置するマクロを編集してるのですが、無効にするとデバッグ出来ません。
一週間以上たったが
>>630 はできなかったみたいだな。DQNが消えてこのスレも健全化するだろう。
VBAで測定器の制御(GPIB)を行っています。 あるデータを取得する関数の戻り値がString限定なのですが、中身がバイナリ直のDoubleで どう変換するべきかつまっています。 全体のデータは #XXX{Data double 8byte}{Data double 8byte}{Data double 8byte}..... の様な形で {data}の部分は8byte double形式で書かれています。 最初に"#" その後にデータの数の桁数 その後ろがデータの数 その後は8byte Doubleの数が並んでいます。 例: #212{data}...({data}が12個) ^個数を表す数字が2桁 の意味 ^{data}が12個あると言う意味 関数はCall ibrd( ID as Int , buf as String , count as long ) にてメモリからデータを countのByte数だけbufに取り込める仕様です。 ibrd( id , buf , 1) '#の部分取得 ibrd( id , buf , 1) '桁数取得 ibrd( id , buf , N) '上記の桁数分だけ取得 for i = 1 to Num step 1 '上記の数分だけ{Data}を取得 ibrd( id , buf , 8) '8Byteづつ取得する next この時、8byteづつ取得すると 変数 buf には String 形式で 本来Doubleのバイナリ値がそのままつっこまれてしまいます。(ウォッチウィンドウで見ると空白など) 数字の1などが入っていればCdbl(buf)でいけるのでしょうが、 型がStringで中身のバイナリがDoubleになってる状況で、これをDoubleに直して数字を取得したいのですが 何か助言もらえないでしょうか?
RtlMoveMemoryとか使えばいいでね?
767 :
デフォルトの名無しさん :2008/05/12(月) 22:04:34
後はいちいち蒸し返すDQNが居るだけだな
769 :
デフォルトの名無しさん :2008/05/13(火) 08:28:32
不正アクセスから、マクロ及びデータを守りたいのですが パスワードの不正解析されても、データ等を守る方法はない?
770 :
デフォルトの名無しさん :2008/05/13(火) 12:27:06
不正解析というか、バイナリエディタで、パスワード上書きされたら終わりだしな。
771 :
デフォルトの名無しさん :2008/05/13(火) 12:34:14
本体から読み込む形にして、不正処理があったらOSから終了させれ 不正アクセスと断定できるなら、偽装データを渡したり どこまで相手にするかにもよるけど、ある程度以上のクラッカには対策立てられぬ そもそもマクロ無効で覗かれたらエクセルじゃどうしようもないし、エクセルのパスは飛ばせる裏技あったような
772 :
765 :2008/05/13(火) 18:42:38
>>766 遅くなりました。
情報ありがとうございます。
試してみます。
775 :
デフォルトの名無しさん :2008/05/14(水) 11:51:19
XP、EXCEL2003です。 シート上の図(Shape)を、すべて削除する方法を教えて下さい。 よろしくお願いします。
モジュールのインポートを一つずつやるのがめんどくさいんだけど、 これって、フォームとかと一緒にまとめられないの?
>>775 forループで↓をActiveSheet.Shapes.Count分回せばいいかも
ActiveSheet.Shapes(i).Select
Selection.Delete
※iはループカウンタ
ループの必要はないよ ActiveSheet.Shapes.Delete
779 :
775 :2008/05/14(水) 18:14:41
781 :
デフォルトの名無しさん :2008/05/14(水) 22:20:07
VBAを学ぶのにオススメの書籍などはありますか? 目的は、ある外部のデーターベースから、 ブックを開いたときに、選択した情報を効率的に 集めてくるみたいなものをつくりたいのですが。 因みにプログラムの経験はVBAが2週間で、他の言語は知りません。
>>781 ごめん。まったく何を言ってるのかわからない。
みんなはわかるの?
783 :
デフォルトの名無しさん :2008/05/14(水) 22:48:32
データベースとの連携を中心にしたものなら、例えば 仕事に役立つ Excel & Access データベース連携テクニック Softbank といったものがあるけど、 これはある程度VBAを知っている事が前提なんで、やはり最初に入門を中心に勉強してからの方が良いんじゃね?
>>781 ExcelのVBAなんか覚えるよりデータベースの方が役に立つだろう?
785 :
781 :2008/05/14(水) 22:57:39
ソフトバンクからでてる初めてのVBAという本の内容は一応マスターしました。
>>783 さんの挙げてくださった書籍の姉妹本だと思います。
しかし、Dimが出てこなかったりして、結局出来るようになったことは
セルに色をつけたり足し算したりシートの名前を変えたりといったレベルです。
もっとレベルの高いVBAを勉強したいです。
わかりにくくて申し訳ございません。
786 :
デフォルトの名無しさん :2008/05/14(水) 23:01:30
>>784 仕事で大量のデーターを扱うので、データーベースはきちんと扱えるようになりたいです。
SQLとかを勉強したほうがいいのでしょうか?
仕事とは別にVBAを打てるようになって、ゲームとか作りたいです。
現時点のレベルは低すぎるわけなのですが・・・
>>786 仕事はデータベース
VBAは趣味のゲームで
788 :
781 :2008/05/14(水) 23:12:13
>>787 すいません、ド素人なのでよくわからないのですが
データーベースという、VBAみたいなジャンルがあるのでしょうか?
周りにパソコンに詳しい人がいなくて困っています。
セクハラ酷いし。あぁ会社行きたくない・・・
>>788 自分でデーターベースからブックを開くと言ってたじゃないか。
visual basic6ぐらいのデータベース連携の本買って vbaに関してはエクセルのヘルプよく読め
791 :
デフォルトの名無しさん :2008/05/14(水) 23:26:11
無料のRDBが沢山有る現在でも、周囲に詳しい人間が居ない状況でデータベース勉強するのはしんどいぞーーーー
VBAでゲーム作る奴は変態
793 :
781 :2008/05/14(水) 23:45:46
なるほど、自分がやるべきことがわかってきました。 親切に答えてくれた方々、ほんとうにありがとうございました。
796 :
デフォルトの名無しさん :2008/05/15(木) 07:55:47
>>788 年上のお姉さんに当てられたり、美少女の後輩にまさぐられたりする職場なんですね、俺と変わってくれ
データベース/SQL使うんなら、 ExcelVBAより先にAccessのクエリー/マクロ/レポートを覚えた方が金になるぞ
このスレではVBAでソートを作る方法を質問するといいよ。
799 :
デフォルトの名無しさん :2008/05/15(木) 09:46:13
Vista、EXCEL2007です。 EXCEL2003(XP)で作成したマクロを動かすと動作が異なっています。 <コード> Range("A5").Select ActiveSheet.Pictures.Insert( _ "D:\abc\pic1.JPG").Select Range("A21").Select ActiveSheet.Pictures.Insert( _ "D:\abc\pic2.jpg").Select <現象> (1)Vistaでは、pic2の画像が、A21の個所でなく、A5の個所に挿入されます (pic1の上に重なって) (2)Vistaで、セルを選択して、画像挿入する操作をマクロ記録すると Range("A21").Selectは記録されてますが、 ActiveSheet.Pictures.Insert("D:\abc\pic2.jpg").Selectが 記録されていません。 上記プログラムで、pic2をA21の箇所に挿入できるようにするには どうすれば良いのでしょうか。 よろしくお願いします。
Excel2003のVBAでcontinue forが使えないのは仕様ですか?
801 :
デフォルトの名無しさん :2008/05/15(木) 16:56:49
Excel2000 シート上に ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1") で生成したチェックボックスのみを削除するプログラムを 実行すると アプリケーション定義またはオブジェクトの定義エラーです というメッセージが出ます。 s.FormControlType のところで エラーが出ているのですが、どうやったら動くようになるのでしょうか? Dim s As Shape For Each s In Sheets("sheet1").Shapes If s.Type = msoOLEControlObject Then If s.FormControlType = xlCheckBox Then s.Delete End If End If Next
803 :
799 :2008/05/16(金) 17:00:43
>>801 レスありがとうございます。
スクロールの問題ではありません。
(1)の現象になったので、
マクロと同じ操作をして、マクロ記録してみたら
(2)になりました。
>799 WorkSheet.Shapes.AddPicture(...) かな? 試してないけど ActiveSheet.Pictures.Insert( "D:\abc\pic1.JPG").Top = Range("A5").Top ActiveSheet.Pictures.Insert( "D:\abc\pic2.jpg").Top = Range("A21").Top
805 :
799 :2008/05/16(金) 20:29:24
>>804 レスありがとうございます。
うまくいきました。
806 :
デフォルトの名無しさん :2008/05/16(金) 20:37:24
30125なら上位3桁だけとって、゙30100゙から100刻みで表示させたい。 0.002354なら゙0.00235゙から0.00001刻みでグラフの軸に表示したいのです。 何かよい方法はありませんでしょうか?
807 :
799 :2008/05/16(金) 20:47:07
>>804 別質問ですけど、
804で挿入したオブジェクトのnameは、
どのようにすれば取得できるのでしょうか。
808 :
デフォルトの名無しさん :2008/05/16(金) 23:37:41
仕事でマクロを使って制御のシミュレーションをしたいのですが 1つのプロシージャ内でループ演算をしつつ、他のプロシージャを実行して 変数を変更したいと考えています。 複数のプロシージャを並列処理できる方法はないのでしょうか?
ActiveX EXEを作れば可能。 Win32APIのスレッドも使えるかもねー
既出だったらすみません。 excel2000+winXpで開発してるんですが、 処理を走らせるとメモリの使用率がたまる一方で 解放されている気配を感じません。 しまいにはメモリが足りませんとエラーになり 落ちてしまいます。 助けて!!1 DAO3.6使ってるんですが関係しますかね? メモリを解放する方法ってありますか??
>>810 DoEvent とか
動的配列を使ってるなら必ずeraseするとか
>806 刻み幅等を計算する方法を知りたいというのが主旨かな? 30125の常用対数は、log(30125)/log(10) =4.47892705558292 切り上げて、5 上位3ケタだけ取るので、刻み幅は、10^(5-3)=100 切り上げは、round(x-0.5)+1 という感じかな。
>807 古い環境が無いんで試せてないけど Dim Pic1 As Picture Dim Pic2 As Picutre Set Pic1 = ActiveSheet.Pictures.Insert( "D:\abc\pic1.JPG") Pic1.Top = Range("A5").Top Range("A4").Value = Pic1.Name Set Pic2 = ActiveSheet.Pictures.Insert( "D:\abc\pic2.jpg") Pic2.Top = Range("A21").Top Range("A20").Value = Pic2.Name
>>808 複数のExcelインスタンスを起こして、マルチプロセスでやれば?
これならWin32APIなんか使わずにできるが
timer使え
ループの中でたのプロシージャを呼び出せばいい 灰次
817 :
デフォルトの名無しさん :2008/05/18(日) 23:31:42
マクロでNORMDISTを使いたいんですが、エラーが出てしまいます。 マクロではどのように記述すればNORMDISTは使えるのでしょうか? 誰か教えてください
Excel2000上で動的に配置したチェックボックスにイベント処理を追加したいのですが 方法がわかりません。ヒントだけでもいいのでお願いします。
>>817 ヘルプの例で言えば、
42 対象となる値
40 分布の算術平均(相加平均)
1.5 分布の標準偏差
WorksheetFunction.NormDist(42, 40, 1.5, True)
で、いいんじゃない?
821 :
デフォルトの名無しさん :2008/05/19(月) 20:24:01
実行時エラー'1004'が出ます。 コマンドボタンで、 Workbook Open "C:\-.xls" Worksheets("a").Select Range("A20").Select と入力し別ファイルのシートのセルを選択したいのですが、 どのように直せばいいか、教えていただきたいです。 よろしくお願いします。
>>821 ちゃんと目的のbookが開いているなら、シート名「a」のシートがあれば問題ないよ
>>821-822 シート上に置いたコントロールツールボックスのコマンドボタンならそんなんでまともに動くわけねーよ。
シートや範囲をちゃんとブックから明示しないと。
824 :
822 :2008/05/19(月) 22:04:21
>>823 なるほど、 シート上に置いたコントロールツールボックスのコマンドボタン
おまい天才!
スレ汚しスマソ
別に
>>823 は普通だろ?
Formのコマンドボタンなら
>>821 でも動くだろうが、どこに書いても同じように動くコードを書かんとね。
>>826 どこに書いても同じように動くコードを書く必要はない
コードを書いたクラスでまともに動けば問題ない
質問させて頂きます。 デジタル署名付のVBAプロジェクトで、 ブックオープン時にオラクル接続をし、 オートシェイプで線を引くという処理をしております。 処理後、シートを見るとオートシェイプで描いた線の色がありませんでした。 プリンタで出力すると、線が描かれております。 原因と対処法を教えてください 【OS】windows XP pro 【EXCEL】2003 【処理内容】 Dim OraSession As Object Dim OraDatabase As Object Set OraSession = CreateObject("OracleInProcServer.XOraSession") Set OraDatabase = OraSession.OpenDatabase("TNS", "USER/PASS", ORADB_DEFAULT) Set OraSession = Nothing Set OraDatabase = Nothing ActiveSheet.Shapes.AddLine(98.25, 151.5, 150#, 159.75).Select といったかんじです
>>828 オラクル関係なくね?
接続して閉じてるだけだろ?
それとも、オラクルに繋がなければ問題は解消されるの?
830 :
826 :2008/05/21(水) 07:43:54
>>827 そりゃ確かにそうだね。
冗長な記述を避けるためにもMeとか書かんからね。
>>821 のコードに関してはということ。
831 :
826 :2008/05/21(水) 07:46:16
Me.を書かんことはちょっと違うか。 まどうでもよい。
832 :
デフォルトの名無しさん :2008/05/21(水) 07:59:09
書式設定指定したら?
833 :
デフォルトの名無しさん :2008/05/21(水) 17:42:10
XP、EXCEL2003です。 特定のディレクトリの直下にあるファイル(複数)のファイル名を 全て取得する方法を教えて下さい。 よろしくお願いします。
>>833 ちょこちょこ質問掲示板見てると週に1回は遭遇する質問
ググれば腐るほどコードがある
個人的にはfilesystemobjectを使うのが一番効率いいと思う
835 :
833 :2008/05/21(水) 19:20:12
>>834 レスありがとうございます。
失礼いたしました。
fsoはネットワークドライブ相手だったりするとテキメンに 速度が落ちたりするから困る。 あと、ワイルドカードが無いのはどーゆーことだ。
�確かfsoは、クエリとってからのファイル追加や削除、内容変更に 伴う更新もかなりの直近まで自動的に更新してくれる中々の 優れモンだったという記憶が.... Kernel32.DLL のAPIを使って自分でクエリした場合は、 ファイル数が多く、激しく更新されるような場合は、取得情報と 実態の間に食い違いが発生してユーザーはパニくるのがオチなんだが (これもチラ裏に書くべきだったか)
わざわざfsoやapi使わんでもDir()関数使えばよい
Dirだとパスの長さが255以上になると確かエラーになる。
sage
OS:win xp excel:2007 初めて質問します。お願いします。 ・データ用のシート ・処理用シート の二つを用意します。 データ用シート 店舗→ A B C 商品↓ りんご 100 200 300 みかん 10 20 30 めろん 1 2 3 処理用シートのA1,B1のセルに店舗と商品を書き込むと、データ用のシートを参照して、 そのシートに書かれた数値(例えば、上記の表の「A店(=A1)」の「みかん=B1」だと「100」)が、 処理用シートのC1(「=100」が)に入るようにしたいです。 店舗、商品は任意で追加していきたいので、データ用シートの列、行を検索していくようなやり方がいいのでは、 と考えています。 調べて、VLOOKUP関数を使えば…、というところまで来たのですが、二点のセルの値を見て、 表から一つの値を出力する、というところがわかりません。 何卒、ご指導の方、お願いします。
>>842 VBAに関係ないと思うのだが。
vlookup以外にもlookupやmatchもあるんだから何とかなるだろそれくらい。
なんとかするのがお前たちの仕事だろ。 あのな、上から目線もいいけどここはVBAに詳しくない奴らが 何をどうやったらいいかを聞きにきてるスレなわけ。 その手ほどきをしてやった上でそういうこと言うならいいけど、 回答も示さずにそういうこと言うのは荒らしとかわんねーんだよ。 こたえる気が無いなら質問スレから消えろよカスが。 ↓じゃ、模範的回答を頼む
いや、それだけの情報でVBAでどうしろと。
スレタイ読め。ここは質問スレであって回答スレではない。
>>842 いろんなやり方があると思うけど、私がスマートだと思うのを提案します。
データ用シートをこんなふうにする。
ID 店舗 商品 値段
Aりんご A りんご 100
Aみかん A みかん 10
Aめろん A めろん 1
Bりんご B りんご 200
Bみかん B みかん 20
Bめろん B めろん 2
Cりんご C りんご 300
Cみかん C みかん 30
Cめろん C めろん 3
IDの列は数式で作る。Aりんごのところに
=B2&C2
としてオートフィルで。
つづき 処理用シートで C1には =A1&B1 D1には データ用シートはSheet1にあるなら =VLOOKUP(C1,Sheet1!A:D,4,FALSE) としてできあがり。
>>842 C1に
=index(「データの範囲」,match(B1,「商品名の範囲」),match(A1,「店舗名の範囲」))
と入れる
これVBAじゃないから、次からはEXCEL総合相談スレの方へ行ってくれ
VBA初心者ですが質問させて下さい。 Module1で宣言したパブリック変数をThisWorkbookで参照する事はできないのでしょうか。 状況を説明しますと、nullpo.xlsというマスターファイルがあります。 その中のModule1で処理を実行すると、public変数をインクリメントします。 "名前を付けて保存時"の保存ダイアログで、あらかじめ表示されるファイル名に そのpublic変数を出したいのですがうまくいきませんでした…
852 :
851 :2008/05/24(土) 13:22:46
クスン…終わらないと帰れないんです みなさんの力を貸して下さい。 言い忘れましたがわたしは女です。
>852 俺が何でも答えますよ もうちょっとしたら家に着くから待っててね ところで今日は帰ったらどうするの? 汗かいちゃったってシャワーでも浴びるのかな?かな?
854 :
851 :2008/05/24(土) 13:34:41
>>853 ありがとうございます。
彼氏と待ち合わせしてるんです。
855 :
デフォルトの名無しさん :2008/05/24(土) 13:39:32
VBAを自由自在に扱うために、VBの勉強をしようかと思うのですが VBの種類が多すぎてどれを勉強したらいいのかわかりませんでした。 VBAのためにVBを勉強するには、どのVBを勉強すればいいのでしょうか?
856 :
853 :2008/05/24(土) 13:41:43
死ね。お前に教えることは何もない 自分でどうにかするんだな
857 :
853 :2008/05/24(土) 13:42:33
856は>854宛てな
858 :
851 :2008/05/24(土) 13:59:41
そんな… 他スレで質問することにします。 すみませんでした。
859 :
側近中の側近 ◆0351148456 :2008/05/24(土) 15:22:18
>>853 (っ´▽`)っ
独身の女の子には優しいのね。最低☆
860 :
側近中の側近 ◆0351148456 :2008/05/24(土) 15:23:00
>>855 (っ´▽`)っ
VBAならVB6.0だね。
>>851 そのpublic変数値を返す、public関数でも作れば?
つか、ダイアログに値をいれて有効にする処理が出来てないだけの気がするが…
863 :
855 :2008/05/24(土) 15:29:35
>>860 VB6.0やVB.NETをVBAを使えない人に勧めちゃらめどちらも超ベテラン向けだよ
VBScript位しか残らないけど、VBAとはちょっと合わないかも知れないね。
やっぱしVBAはVBAで覚えるしかないのかな(鬱
VBAを覚えたいのにVBAを利用しない意味がわからない
>>842 商品と店舗の組み合わせが疎であるなら
>>848 の方法
組み合わせが密であるなら
>>850 の方法がいいだろうね。
ところで解決したのかどうか反応がほしいもんだね。
コミュニケーションしようや。
>>865 これほんとにその通り。
なんでVBAを覚えるためにVBを覚えたいなんて言うのかな。
VBを覚えたいんだって素直に言えばいいのに。
868 :
デフォルトの名無しさん :2008/05/24(土) 21:29:23
VBってMSDNライブラリ使えるの?
869 :
デフォルトの名無しさん :2008/05/24(土) 21:38:17
VBAを体系的に勉強するのにいい本とかありますか?
実戦力UP! Excel VBAドリル式問題集
VBAとはマクロの記録で泥縄式に覚えていくもんだ
872 :
デフォルトの名無しさん :2008/05/24(土) 22:46:45
エクセル2003で上の行から数字が入ったセルだけをm個 選んで加えるVBAをうちたいんですが、上手くいきません。 for a = 1 to 100 m = cells(3 , 3) b = cells(1 + k + a , 1 ) k = 1 s=1 do while s =< m if b <>"#na n/a" then b = b + cells(1 + k + a + s , 1) k = k + 1 s = s + 1 else k = k + 1 loop next いまこんな感じで打ってるのですが、 if b <>"#na n/a" then のところで止まってしまいます。 どこがおかしいのでしょうか? また、もっといい方法はありますか?
>>872 「数字が入ってるセル」なら条件をb≧0にすれば?
負の数は数字ではないと?
kとsを+1しているがループするたびに初期値が1に戻るぞw あと、b = cells(1 + k + a , 1 )の部分、1回目の処理でkの値が判らない。
876 :
デフォルトの名無しさん :2008/05/24(土) 23:39:42
application.run "abc" msgbox "zzz" abcマクロの完了の後に、ダイヤログボックスにzzzを表示したいのに、 即行でzzzが表示されてしまう。 同期をするようにするには引数か何かを入れるのでしょうか?
877 :
デフォルトの名無しさん :2008/05/24(土) 23:40:54
>>873 なるほど。そういう方法がありましたか。
ありがとうございます。
>>874 負の数は存在しないデータなので、大丈夫だと思います。
エラーがでた原因がわかる方はいらっしゃりましたら、お答えいただきたいです。
878 :
875 :2008/05/24(土) 23:42:23
ごめん入れ子になってたんだな。最初のforしか見てなかった。
end ifが無いな
880 :
872 :2008/05/24(土) 23:43:44
>>875 すいません初心者なもので、いまいち意味不明です。
勉強して理解したいとおもうのですが、参考までにどういった
勉強をすればいいか教えてください。
オススメの本、サイト等等・・・
>>877 <>"#na n/a"
エラー値でなければ って条件と思っているのであれば間違い。
エラー値かどうかを調べたいのならiserrorを使う
882 :
872 :2008/05/24(土) 23:47:24
for a = 1 to 100 m = cells(3 , 3) b = cells(1 + k + a , 1 ) k = 1 s=1 do while s =< m if b > 0 then b = b + cells(1 + k + a + s , 1) k = k + 1 s = s + 1 else k = k + 1 end if loop next これで大丈夫でしょうか?
883 :
デフォルトの名無しさん :2008/05/24(土) 23:48:51
>>881 そういうことでしたか。
iserrorという存在を知りませんでした。
勉強不足でした。
ありがとうございます。
> if b <>"#na n/a" then これエラーなんか出ないよ 意図したとおりには動かないかもしれないけど
885 :
デフォルトの名無しさん :2008/05/24(土) 23:57:29
根本的な間違いがあった for a = 1 to 100 m = cells(3 , 3) b = cells(1 + k + a , 1 ) k = 1 s=1 do while s =< m if cells(1+k+a+s-1 > 0 then b = b + cells(1 + k + a + s , 1) k = k + 1 s = s + 1 else k = k + 1 end if loop next すいませんでした。
まあなんだ ちょっと落ち着け
887 :
デフォルトの名無しさん :2008/05/25(日) 12:04:28
シートコピーで悩み事があるので打開策を見つけられたらと思い書きこまさせていただきました。 どなたかお助けいただけたらうれしいです。 VBAにてシートコピーに要する時間が長くて(10分以上)悩んでおります。 Bookの構成といたしまして標準モジュールに数式文字列を評価するものを かいてあります。 Function Eval(ByVal expr As String) Eval = Evaluate(expr) End Function ・Sheet1には、様々な経理データを入れるようにしてあります。 そこに入れた値などを元にセル名を作るように書いてあります。 例)A1に”1”という値でB1に”2”という値が入っていればA2のセル名を”12” とします。 ・Sheet2には予めセルに=eval(12)の様な数式をいれ評価をしております。 これが1枚のシートに2000くらい数式が入っています。 Sheet1、2ともに特定条件のとき複製を何枚か作ります。 このときすごく時間がかかります。 原因は数式が大量にあるものをコピーすること及びセルに名前をふっているのが原因なのは分かりますが コピー以外の動作が非常に快調なので変えたくないということとたぶんeval以外での解決策を模索するのはかなり時間を要しそうなのでコピーを何とかする方を選びたいです。 もちろん再計算の停止などはしてあります。 事前に特定条件を作りだしシートを非表示にしておき特定条件のときに表示させるのも 一つの手ではありますが何百枚もシートを隠しておくとファイルサイズがばかでかくなるという 難点もあって躊躇しています。 例えば=eval(@@@@@@)を多く入れたのが原因であれば標準モジュールを何らかの形でいったん無効にすれば早くなるのかとかスクリプトなどを使って別のブックからシートを移動させるなど・・・・他の代替案はありえないでしょうか? 何分わかりづらい質問で申し訳ありませんが、ご回答いただければ幸いです。 よろしくお願いします。
まず計測しろよ。んで、遅い原因を特定してから、もっとわかりやすい文章で再質問な。
自動計算やめてシートコピー
890 :
876 :2008/05/25(日) 13:03:06
>>887 質問する方のレベルのものが下手なレスをつけるのもどうかと思うが、
設問説明に既に回答があるような・・・
経理処理なのでシート数が大量となるのはある程度やむを得ないでしょうが、
それにしても、10分というのはかかりすぎというか、長いですね。
1 object.enablecalculation=falseを設定されていると言うことですが、
必要なシート全てにされているかどうか
2 通常、速度を速める常套手段の
application.screenupdating=false
application.visible=false
application.enableevents=false
で、どうなるか試してみたらいかがでしょう
私の質問は解決しました。
直列処理のはずが、並行処理になったのかとの疑問からでしたので。
>>887 どこかで見たような質問だな
何でそんなおかしなことするの?
>>887 別にここはブック提示禁止じゃないから晒してみたら?
' ただの荒らしのコピペじゃないかと疑い始めた
なんだ、二週間前の話じゃねーか。 第三者によるコピペの疑い濃厚だな。 しかし、誰もプロファイリングしろというアドバイスしないって、mougってどんだけ素人集団なんだよ
あー、ひょっとして、シートを一枚sheet.copyで10分かかるってことか? だったら、プロファイリングも糞も無いな
プロファイリングっていうの初めて聞いたorz
マルチなら放置 荒らしのコピペなら放置 どっちにしても放置だな
899 :
デフォルトの名無しさん :2008/05/25(日) 23:12:29
セルに記載されている文字列を変数名として認識させる方法はありますでしょうか?もしくは無理ですか? (1,1) に hoge って文字列が入っていて、VBAの記述内に、 cells(1,1).value = 100 '←これは当然上書きされますが・・・。 のように、変数名として取得して代入が出来たら良いな。と考えております。 なにとぞよろしくお願いします。
aaa(1,2,3) bbb(1,2,3) 2個の同一の配列があるのですが、この二つが同一であるかの判定について質問させてください。 今は配列長を取得して、forで繰り返してaaa(i) = bbb(i) と1要素ずつ判定しているのですが、 もっとシンプルに、行数を少なく判定する方法はありますでしょうか。アドバイスお願いしま!!!
>>899 hogeをどこにも使ってないじゃないか。
>>900 原理的に全要素を比較するしか判定のしようがないから、今の方法でいいんじゃない?
902 :
VBAの初心者 :2008/05/26(月) 01:57:42
言葉遣いは似てるね、無駄に敬語とか
それやるならデリミタを変数中に絶対出てこない文字にしておけよ
一応ExcelVBAの質問です プログラム実行中に、ユーザーフォーム上のimageの表示・非表示や、 ラベルのキャプションの変更することは出来ないのでしょうか? 実行中に内容が変更できるオブジェクトはprogressbarのみですか?
909 :
デフォルトの名無しさん :2008/05/26(月) 18:21:24
連投、誠にスマンです VBAで、作業用シートを作成して、ソートとか 色々やった後、用が済んだらシートを削除するようなプログラムを作って いるのですが、 sheets(hoge).delete の後、必ず「データあるけど削除してOK?」っていうダイアログが出てしまいます。 このダイアログに自動的にYesで答えて、プログラムを中断しないように 出来ないでしょうか。
なんちゃらAlear = false
tが抜けてたorz DisplayAlertsでヘルプ嫁
912 :
デフォルトの名無しさん :2008/05/26(月) 20:19:11
>>908 UserForm1.Label1.Caption = "testtest"
表示・非表示なら多分 〜.visible = true とか false とかで逝けるんじゃね?
>>910 ありがとうございます!
できました。
>>912 プログラムが走っている最中は、フォームの画面更新が
行われないようで、それらが効かんです(T-T
Screenupdating=falseが入っていたら画面の更新はされないが、そういうオチか。
ちなみに、DisplayAlertsもScreenupdatingもマクロの最後でちゃんとTrueに戻すのが基本だからな
917 :
デフォルトの名無しさん :2008/05/26(月) 23:43:01
質問失礼します。 新しいシートを作成→そのシートにスクリプトやイベントを埋め込む を自動でやるにはどうしたらよいですか? もちろん埋め込みたいスクリプト等は事前に作成しておくものとします。 どうすれば、それを新しいシートに埋め込む操作ができますか? お手数をおかけします。よろしくお願いいたします。
ちなみに3を推奨しないのは、それを実行するPCグローバルなExcelの設定を変更する必要があるから。 マクロの信頼性とは別に、「Visual Basicプロジェクトへのアクセスを信頼する」という設定をしなければならない。
>>917 ・Class1を作って、Public WithEvents sh As WorkSheetを追加
・ThisWorkBookのモジュールに、Dim o As Class1を追加
・ThisWorkBookのWorkbook_SheetActivateで、
・Set o = New Class1
・Set o.sh = sh
・Class1のsh_SelectionChangeで、
・MsgBox Target.Parent.Name & "!" & Target.Address
似たような感じで、各シートのモジュールにコードを追加することなく、イベントハンドらを
実装できる。あとは、Class1のo.shやら、ActiveSheetやらで、各シートのモジュール外に
コードを実装しろ。シートごとに違う処理をする場合は、sh.Nameとかで振り分けろ。
>>917 新規に埋め込まなくても、雛形シートをコピーした新しいブックを作って解決
チンコが大きくなるマクロを作ったはいいんですが、どうやって呼び出したらいいんですか?
>>922 ああ、それさっきコンパイルしたら「オブジェクトが小さすぎます」ってコンパイルエラー出たよ
924 :
デフォルトの名無しさん :2008/05/27(火) 08:15:42
連続質問になってすんません…セル名が変わらんくて困っとります。原因がさっぱりどす…If Worksheet("Sheet1").Range("A1").value = 1 Then For i =1 to 20 Worksheet("Sheet1").cells(1,i).name = "mid"&cells("B",i).value Next i End if Next
何をやってるのかさっぱりどす Worksheet("Sheet1").cells(1,i).Name.Name
926 :
913 :2008/05/27(火) 09:18:33
927 :
デフォルトの名無しさん :2008/05/27(火) 10:09:15
A1の"セル名"を変えるには、range("A1").value = "ほげ" どすえ。
928 :
デフォルトの名無しさん :2008/05/27(火) 11:04:14
Excel一般の質問ではないのですが、ExcelVBAのリストボックスの 中身の上下スクロールをマウスのホイールに連動させることは 出来ないのでしょうか? ググってみたのですが、分かりませんでした。
929 :
917 :2008/05/27(火) 15:59:44
>>918-921 ありがとうございます!勉強になりました。
とりあえず一番簡単な921さんの方法を試してみますね。
ネタでも「変わらんくて」と言う奴が死ぬほど嫌いだから絶対教えない。 ら抜き言葉でもブチ切れそうなのにさぁ、どうしてわざわざ”な”を”ん”に 置き換えるんだよ最近のゆとりどもは。書いてて違和感ねーのか糞が。
>>930 基地外乙w
単にローマ字入力でAが抜けたTypoだろ
932 :
930 :2008/05/27(火) 17:00:52
>>931 いや、「分からんくて」「変わらんくて」「倒せんくて」
とか書き込む奴はかなり多いぞ。
そういう言い回しが流行ってんのか?ってほど。
年齢層の低いスレ覗いていないと分からんくても
仕方ないけど…
>>932 >分からんくても
死ね
933 :
913 :2008/05/27(火) 17:11:05
ユーザーフォームの更新の件、DoEventsでいけました
ありがとうございました
>>932 それは関西弁っていう日本ではメジャーな言語
35才の関西人だが「…くて」は割と使う。
>>930 はもう少し視野を広げてみてはどう?
935 :
デフォルトの名無しさん :2008/05/27(火) 19:56:10
テンプレみたらNG質問のようだが、適当なスレが見付からないので教えてください。 ExcelBVAのテクニックは大体わかります。 しかし、「Excelを起動するとVB?が起動し、ユーザーフォームとExcelが分離している状態」 のプログラム技術を身につけたいと思っています。 これを会得するには、やっぱりVBの知識と多大なる努力が必要なんでしょうか?
24歳の関西人の俺はつかわない だがそんなことにマジ切れすとか、情緒不安定なんじゃね?
>>935 VBAでできる。
どれくらいの努力が必要かは、君のセンスと知力に依存するので誰も答えられない。
>>935 できない私が言うのもなんだが、そんなことできて何がいいの?
ユーザーフォームって、マウスホイールに対応してないとか
使いづらいんじゃないすか。
>>936 「マジ切れす」?また怒られるぞ!
940 :
デフォルトの名無しさん :2008/05/27(火) 22:31:35
>>937 うおお、マジですか、VBAでできるの?
怒られそうだがさらに質問。
どうやんの?メニューバーとかどーみてもVBっぽかったけど。
>ExcelBVAのテクニックは大体わかります。 >ExcelBVAのテクニックは >ExcelBVA ExcelVBAを知らないんだからしょうがないよな
エクセルを隠すだけなら ' Excel本体は隠す Private Sub UserForm_Initialize() Application.Visible = False End Sub やりたいのはこういう事?
そうじゃなくて、エクセルを使わずに、フォームだけで何かを 構築したいという事でしょ。
関西人なら「変わらんで」「変わらんかって」だと思うが
河内のぉ〜○っさんの歌ぁ〜
はじめまして。 リストボックスで選択した項目を任意のアクティブセルに反映させる時、 反映させたくないセルに反映させないようにするにはどうしたら良いでしょうか? 例えば、セル"A1"には反映させたくないけど、"A1"をアクティブにしたまま リストボックスにて項目を選択して反映させてしまうのを防ぎたいのですが。
>>947 オフセットかなんか使って条件分岐するしかないのでは?
B1に何か入力がある時は、A1には入れないみたいな感じで。
Sub nnn()
If Trim(ActiveCell.Offset(0, 1).Value) = "" Then
ActiveCell.Value = Userform1.ListBox1.value
Else: Exit Sub
End If
End Sub
ありがとうございます 試したけどなかなか理想した感じにできなかったので、 ロック設定で我慢します・・
950 :
デフォルトの名無しさん :2008/05/28(水) 20:27:42
>>943 そうです。今の考えでは、
@フォームにあるボタンを押すとExcelが起動して、
A入力用のフォームに値を入力すると、
Bクチャクチャっと値が返されて、(大量の関数的な部分があるので、慣れたExcelのセルでやりたい。)
CCSV形式で出力されて、
D違うソフトにそれを読み込ませる、またはVBだったらそのソフトを外部から操作してやってみたい。
(そのソフトの仕様は全然わからんのだが。)
Dが無ければVBAでやれると思うんだが、Aの時に、ExcelVBAだと俺の知識ではマクロ実行中は
任意のセル編集ができない。
やっぱVBじゃないとダメ??
951 :
デフォルトの名無しさん :2008/05/28(水) 20:28:23
>>943 そうです。今の考えでは、
@フォームにあるボタンを押すとExcelが起動して、
A入力用のフォームに値を入力すると、
Bクチャクチャっと値が返されて、(大量の関数的な部分があるので、慣れたExcelのセルでやりたい。)
CCSV形式で出力されて、
D違うソフトにそれを読み込ませる、またはVBだったらそのソフトを外部から操作してやってみたい。
(そのソフトの仕様は全然わからんのだが。)
Dが無ければVBAでやれると思うんだが、Aの時に、ExcelVBAだと俺の知識ではマクロ実行中は
任意のセル編集ができない。
やっぱVBじゃないとダメ??
>>951 それって、100%ExcelVBAのような気がするけど・・・
953 :
デフォルトの名無しさん :2008/05/29(木) 09:23:10
共有されていないブックを、"読み取り専用"で開いているメンバーを VBAで調べるのは不可能ですか。
VBAにCで言うDefineのようなものはないのでしょうか。 StaticステートメントをDefineのように使うのはおかしくないですか?
自分の家でつくったユーザーフォームが友達のPCで開いたら 背景色が変わってたんだけどなんで? 俺excel2000 友excel2002
956 :
デフォルトの名無しさん :2008/05/29(木) 14:31:16
ユーザーフォームの色は、絶対指定と、OSの設定にあわせる方法と 二種類あって、おそらく後者を適用しているのでしょう。
957 :
デフォルトの名無しさん :2008/05/29(木) 17:38:31
VBAに日本語化パッチを当てるにはどうすればいいのでしょうか
いろいろと検索してもわからなかったので質問させていただきます。 CSVファイルをエクセルファイルに変換したいのですが、特定の列だけを 文字列として処理を行いたいのです。 また、変換元のCSVファイルの指定をBATファイルを利用したいのですが、 よい手段がわかりませんでした。 なにかいい方法はありませんか??
VB Editor じゃなくて、自分の好きなエディタでマクロを書きたいのんですが、 何かいい方法ありますか? 今はエディタから全コピーしてVBA側に全ペーストしてます;;
俺は秀丸派でCもJAVAも書いてたんだけど VBA使ってみてビビった。あれはVBAが 元始にして究極のエディタだと思うんだが。 関数の保管とかしてくれるしもう最高。
×保管 ○補完
UserFormで変数を持つにはどうすれば良いですか? UserFormにTextBoxを貼り付けてTextBox1を変数として使うのもよいのですが 内部で使う変数なので表示はしたくないです。 何をやりたいかというと、このUserFormでOKボタンを押されたことをBOOL変数に記録し、 そして呼び出し元で、OKが押されたかどうか判断したいです。 つまりMFCで言えば CDialog dlg; if(dlg.DoModal() == IDOK) { UserFormObj.Show IF UserFormObj.bOk = TRUE THEN 処理 END IF 見たいな事をしたいです。
964 :
デフォルトの名無しさん :2008/05/30(金) 00:50:38
UserFormで変数を持つにはどうすれば良いですか? UserFormにTextBoxを貼り付けてTextBox1を変数として使うのもよいのですが 内部で使う変数なので表示はしたくないです。 何をやりたいかというと、このUserFormでOKボタンを押されたことをBOOL変数に記録し、 そして呼び出し元で、OKが押されたかどうか判断したいです。 つまりMFCで言えば CDialog dlg; if(dlg.DoModal() == IDOK) 処理 みたいな。 VBAだと UserFormObj.Show IF UserFormObj.bOk = TRUE THEN 処理 END IF って感じだと思ってます。
すみません。2重カキ子しちゃいました。。
>>963 は無視してね
すみません。2重カキ子しちゃいました。。
>>963 は無視してね
>>964 UserFormにOKプロパティを作る
又は、手軽に標準モジュールにPublic変数を宣言する
すみません。2重カキ子しちゃいました。。
>>964 は無視してね
>>967 ありがとうございます。
OKプロパティーというのがあるのですね。勉強になります。
#今日は書き込みがやたらエラーになる(:_:)。スレ汚しすみません。
>>969 ごめん、UserFormにOKプロパティ作っても、UserFormが閉じたら変数破棄されるからダメだね
Public変数でどうぞ
VCで作成したDLLを使用してVBAでプログラマしてます。 Private Declare Function DataRead Lib "ExcelVBA.dll" Alias "_CareerDataRead@4" (strFileName As String) As String・・・@ だと「DLLが見つかりません」と出てきます。そんで、Dllのパスをフルパスにしてやると動作するんですが、そすると他のPCで パスがないので「Dllが見つかりません。」と出てきちゃいます。 できれば、ブックのあるフォルダにDLLをおいて@のように呼び出したいのですが、無理なのでしょうか?
973 :
デフォルトの名無しさん :2008/05/31(土) 10:10:45
セルに挿入されているハイパーリンクを普通にクリックして、ページ先に飛ぶようなことを VBAから実行することは可能でしょうか。 あと、ユーザーフォームにハイパーリンクを張ることは可能ですか?
例えば、PC起動時にあるソフトをアップデートしたいとき、VBAできたりするんですか?
そんなもんメールで告知しろ。 内部的なソフトで、アップデート(上書き)したいだけなら バッチファイルとスタートアップのショートカットを駆使すりゃいいやん
VBAからSystem.Text.StringBuilderを使うとき、 オーバロードがどのAppend_数字に対応しているか調べるには どうすればよい?
977 :
デフォルトの名無しさん :2008/06/01(日) 18:51:45
エクセル2000で 指定した名前で CSVファイルで保存する方法ってわかりますか?
978 :
デフォルトの名無しさん :2008/06/01(日) 19:29:10
>>977 使ったことないけど、getsaveasfilename でいいんじゃない?
980 :
側近中の側近 ◆0351148456 :2008/06/01(日) 20:32:46
>>977 (っ´▽`)っ
Excel2000のVBAでCSV保存すると、
日付型はことごとく文字化けするけどなー☆
981 :
デフォルトの名無しさん :2008/06/01(日) 20:44:27
ビジュアル ベーシック フォー 哀川翔
984 :
側近中の側近 ◆0351148456 :2008/06/02(月) 20:44:29
>>983 (っ´▽`)っ
Jan 1 2007とかにならんかね?
986 :
側近中の側近 ◆0351148456 :2008/06/02(月) 20:54:18
>>985 (っ´▽`)っ
これは文字化けじゃないか。
細かいことは気にするな☆
いわゆるマクロウイルスとかいうやつのコードの書き方教えて。 ウイルスチェックで引っかかるところを見てみたいだけです。
988 :
デフォルトの名無しさん :2008/06/03(火) 12:49:33
携帯からたどり着きました。スレ違いだったらすみません。 よかったらご教授願います。多分とても簡単な事だと思うのですが…超初心者です。 OSはXP、Excel2003です。 ファイルAの内容を、カメラ機能を使って、ファイルBに取り込もうとしています。 ファイルAのシート名は1〜31までの整数です。(1日1シート) ファイルB上でマクロを実行した時、実行日に相当するシートの範囲を読むようにしたいのですが、以下のマクロでは、エラーになってしまいます。手直しして頂けないでしょうか。宜しくお願いします。 Sub カメラのリンクを編集() Dim i As String i = Day(Date) ActiveSheet.Shapes("camera").Select Selection.Formula "='G:\平成20年\[ファイルA.xls]i'!$A$1:$K$60" End Sub
ここは手直しスレじゃないんだが。 せめてどんなエラーになったか位書こうよ。 あー、シート名が変数i(不適当な名前だw)に入っているのなら、文字列を組み立てないとダメだね。 >988では"i"と言う名前のシートを探そうとしてしまう。
×ご教授 ○ご教示
991 :
デフォルトの名無しさん :2008/06/03(火) 14:55:10
>989、990 文字列を組み立てるというアドバイスの元見直しをして、無事完成しました。 スレ違い失礼しました、「ご教示」ありがとうございました。
質問したいけど構文ここに書くの面どくせえ
・・・ If ActiveCell.Column = 6 Then Range("A1:A10").Copy ActiveCell Else MsgBox "ここは駄目" End If ・・・ これだと6列目を先頭としてA1〜A10のセルをコピーでき、 6列目以外は入力不可でmsgboxが出るのですが、 例えば6列目〜10列目を入力可能にするにはどうしたら良いでしょうか?
994 :
デフォルトの名無しさん :2008/06/03(火) 22:18:12
オートシェイプの始点やら終点ってどういう単位? Sheets(2).Shapes.AddLine(Xs, Ys, Xe, Ye).Select たとえば、こうやって変数で当てて500から520までかけ。次に520から540までかけ ってやっても線がつながらんのだが。
>>994 ちゃんとつながるぞ。単位はポイント
Sheets(1).Shapes.AddLine(50, 100, 100, 50).Select
Sheets(1).Shapes.AddLine(100, 50, 150, 100).Select
Sheets(1).Shapes.AddLine(150, 100, 100, 150).Select
Sheets(1).Shapes.AddLine(100, 150, 50, 100).Select
VBAを使用して作成したExcelファイルを立ち上げようとすると、 「問題が発生したため、Microsoft Excel for Windows を終了します。 ご不便をおかけして申し訳ありません。」 というMicrosoftのエラーになり、Excelが開かなくなってしまいました。 中のモジュールを何とか見る方法はないでしょうか?
997 :
デフォルトの名無しさん :2008/06/04(水) 20:06:50
あるセルにある文字列が入っています。特定の文字列では無いのですが、 この文字列から、条件を満たす物を抽出したく考えております。 具体的には、「*」 で囲まれた文字列を抜き出したく考えております。 (「」で囲まれた物以外を削除) 調べてみたのですが、このような処理は可能でしょうか。 可能でありましたらば、教えてくださいませ。よろしくお願いします。
regexp
999 :
デフォルトの名無しさん :2008/06/04(水) 22:58:25
1000 :
デフォルトの名無しさん :2008/06/04(水) 23:08:39
10000ならオマエラの人生幸せ それ以外なら一生不幸
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。