Excel VBA質問スレ Part6

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
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 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
2 ◆EXCEL8qygs :2008/03/11(火) 19:48:40
とりあえず死兆星おいときますね。
              ☆         
          ☆               
                ☆       
                           
             ☆            
                           
               ☆       
                           
               ★☆     
                    ☆     
3デフォルトの名無しさん:2008/03/11(火) 22:09:44
4デフォルトの名無しさん:2008/03/12(水) 13:39:54
指定したセル以外の入力を避けたいのですが
Range("C3,E3,D5").Select
Range("D5").Activate
でやると、一応完成するのですが、間違いを消去した時
全てのセルデータまで消えてしまうのですが・・・
どう処理したらいいのでしょう?


質問1っパツ目ではずかしい

5デフォルトの名無しさん:2008/03/12(水) 14:08:31
間違いを消すときに、間違ったセルだけ消せば?
6デフォルトの名無しさん:2008/03/12(水) 14:20:32
>間違ったセルだけ消せば?
これをマクロでしたのです。TEXTBOXを使えば簡単ですけど
あえて使わずして仕上げたいです。
7デフォルトの名無しさん:2008/03/12(水) 14:36:28
・今どういうコードで「間違ったセルを消し」てるのか書け
・TextBoxを使えばどのように簡単になるのか、コードも添えて説明しろ
8デフォルトの名無しさん:2008/03/12(水) 15:22:11
・今どういうコードで「間違ったセルを消し」てるのか書け
ただ、DELETEしてるだけ。
・TextBoxを使えばどのように簡単になるのか、コードも添えて説明しろ
TextBox プロパティで順番つけてるだけだよ。


9デフォルトの名無しさん:2008/03/12(水) 15:35:04
「コード書け」の意味が理解できないのか?
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
って所かな?あえて書けば・・・



11デフォルトの名無しさん:2008/03/12(水) 16:41:27
>>10
だーかーらー、

>>6
>>間違ったセルだけ消せば?
>これをマクロでしたのです。
これのコードを書けって言ってるの。

>って所かな?あえて書けば・・・
何がどう簡単になったか説明しろって書いただろ?

>>4
>指定したセル以外の入力を避けたい
これの意味が曖昧だから、ちゃんと説明しろってこった。
12エスパー君登場:2008/03/12(水) 16:45:00
つ「シート保護」
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へ戻る
とエンターキーを押すごとにセルの移動が行われる様にしたい(繰り返し)
わかってくれた?
14デフォルトの名無しさん:2008/03/12(水) 17:43:05
情報小出しは以後ヌルー
15デフォルトの名無しさん:2008/03/12(水) 17:43:28
マクロで消してないじゃん・・・
16デフォルトの名無しさん:2008/03/13(木) 08:57:37
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

でシートの存在を調べているのですが、グラフのみがあるシートが引っ掛かりません。
どう書けばよいでしょうか?
1810:2008/03/13(木) 12:19:51
16さん ありがとう。これがしたっかです。
日本語がわるいのかぁ・・・
反省します。

19デフォルトの名無しさん:2008/03/13(木) 18:47:58
>>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の合計値

といった具合にセルに入力されています
21デフォルトの名無しさん:2008/03/14(金) 10:08:44
>>20
それワークシート関数(なんたらLookupとか)で実現できるけど、マクロでやりたいの?
22デフォルトの名無しさん:2008/03/14(金) 10:18:52
>>21
マクロと関数の違いを理解していないのですが、
実現できれば問題ないです。
23デフォルトの名無しさん:2008/03/14(金) 10:47:07
IF 1 ELSE 6500
IF 2 ELSE 6600
...
といった感じの関数を組んでいくのでしょうか?

もしくは文字列を数字に変換にする関数でもあるのでしょうか?
24デフォルトの名無しさん:2008/03/14(金) 11:36:39
ワークシート関数でいいなら、シートのどこかに
1 6500
2 6600
3 6700

という表を作って、合計するセルに
=VLOOKUP(A1,$G3:$H11,2)+VLOOKUP(B1,$G3:$H11,2)+・・・
とかすればいい。
A1, B1, …はデータのセル、$G3$H11は上の表のセル範囲。
25デフォルトの名無しさん:2008/03/14(金) 16:04:16
スレが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
一つのセルの中に複数の値がスペース区切りで並べて書いてあるのですが
これを上手く取得する方法はないでしょうか?
27デフォルトの名無しさん:2008/03/14(金) 19:22:52
>>26
つsplit関数
28デフォルトの名無しさん:2008/03/14(金) 19:22:58
split
29デフォルトの名無しさん:2008/03/14(金) 22:12:01
>>24
lookup()じゃなくて、vlookup()を使う理由は?
# 昼間lookup()版を書き込もうとしたらアクセス制限されてた(:;
30デフォルトの名無しさん:2008/03/14(金) 23:17:45
vlookupのほうが有名だからだろ。
31デフォルトの名無しさん:2008/03/15(土) 00:54:07
無印lookupはいらない子
32デフォルトの名無しさん:2008/03/15(土) 01:52:35
このスレの住人なら知っていますね、あの糞開発ツールのことを

・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている

糞だけど、政治的な理由で無理やり使わされているんですよね
もういい加減、我慢するのはやめませんか?

・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・あの糞開発ツール提供会社には「糞開発ツールは話にならない」と突き放しましょう。
 バグレポートなどしてはいけません。改善要求などもってのほかです。
 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
 なんて話が出たら力強く机を叩き、会議室を出ましょう。
 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。

糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
33デフォルトの名無しさん:2008/03/15(土) 01:57:49
そんなものを使っている会社を辞めないお前も不思議な人間だ。
34デフォルトの名無しさん:2008/03/15(土) 19:21:33
VBAスレなのに、関数で答えを返す謎なスレ。
簡単に関数で解決できても、小難しくVBA自作関数で返してやるのがこのスレの醍醐味だろ?
35デフォルトの名無しさん:2008/03/15(土) 21:17:04
36デフォルトの名無しさん:2008/03/15(土) 23:33:54
良回答認定
37デフォルトの名無しさん:2008/03/16(日) 12:10:16
>>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
Excel向けの月例パッチにバグ、マクロ実行時の計算に誤り
http://www.computerworld.jp/topics/dm/101230.html

この記事の内容が理解できないのだが
誰かわかりやすく説明してください。゜(ノД`)゜。
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〜 就寝
    (__)))))_)))))    ※風呂に入るのは一週間に一度だけ
42デフォルトの名無しさん:2008/03/17(月) 21:39:44
 MS08-014によって生じる問題とは、Excelで特定のタイプのマクロが実行されたときに、
Excelが正しい数値ではなくゼロを返すというもの。Excel 2003において、株価や在庫量
などのデータを外部ソースからリアルタイムで取得し、それらをExcelの配列にプラグイン
しているケースで発生する。
43デフォルトの名無しさん:2008/03/17(月) 21:43:48
--
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上で配列に格納すると発生するってこと??
45デフォルトの名無しさん:2008/03/17(月) 23:34:29
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
...
48デフォルトの名無しさん:2008/03/18(火) 00:29:57
右行って下行って左行けばぁ?
49デフォルトの名無しさん:2008/03/18(火) 08:24:08
つまり、結合したりしてるシートにOffset関数は使い物にならないということで?
50デフォルトの名無しさん:2008/03/18(火) 09:42:40
Office 2000だと、range("A1").offset(3,0)はA4になるな。
仕様が変更されたのかな。
51デフォルトの名無しさん:2008/03/18(火) 12:22:18
Replaceを使って置換するべき文字列を、変数定義した内容で置換する事は出来ますか?
52デフォルトの名無しさん:2008/03/18(火) 13:14:08
>>51
もっと具体的に
53デフォルトの名無しさん:2008/03/18(火) 18:22:10
>>52
あるExcelのシートの文字列の一部を置換したいとします。その文字列を入力のボックス作成、そこを手入力し、置換出来る様にしたいのです。
例えば"犬"を"猫"としたり、"犬"を"馬"と置換出来る様に組みたいです。
携帯なのでソースは別途見せます。
54デフォルトの名無しさん:2008/03/18(火) 22:11:13
なんかいきなりVBAと謳われる神の言語を使用して
ツールを期限付き(超最短)で作るハメになったんだけど
これって1日半ぐらいあればマスターできますよね?
55デフォルトの名無しさん:2008/03/18(火) 22:13:39
できます
56デフォルトの名無しさん:2008/03/18(火) 22:15:30
>55
ありがとうございます!!
57デフォルトの名無しさん:2008/03/18(火) 23:52:20
VBA初めて半年ぐらいの初心者です
セルに挿入されたコメント(セルの右上に赤い三角のでるやつ)
にかいてある文章を取得することってできるのでしょうか?
自分で色々ヘルプを見てみたところVBAでコメントの文章の設定はできるようなのですが、
取得する方法が分かりません。

具体的に言うと、ある人が仕事に使う表(約40シート、各シートに20×5セルぐらい)を
エクセルに打ち込んだんですが、表の中に何箇所か、セルに値を入れるところを
コメントに入れてしまったんです。

セル内におさまらなかったし、コメントだとカーソルをもっていくと長い文章も表示されて
見やすいからだそうですが、その仕事を引きついた自分はやりにくくてしょうがいないので
コメントの設定されているセルの値にそのままコメントの文章を入れたいのです。

手作業でやると結構時間がかかりそうな量なのです。
マクロの記録で「コメントの編集→コメント文章のコピー→セルに貼り付け」
をやってみたのですが、コメント文章のコピーの部分が記録されていませんでした
分かる方いたらお願いします。
58デフォルトの名無しさん:2008/03/19(水) 00:12:02
range1.comment.text
59デフォルトの名無しさん:2008/03/19(水) 00:23:43
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のリストが閉じちゃう。

ハイ、ダメェ〜

エンタの見すぎですいません

62デフォルトの名無しさん:2008/03/19(水) 11:58:32
答える気にならんな
63デフォルトの名無しさん:2008/03/19(水) 12:43:54
そこを何とか・・・
64デフォルトの名無しさん:2008/03/19(水) 13:18:02
コンボボックスって、フォーカスを失っても開きっぱなしにすることできるのか?
65デフォルトの名無しさん:2008/03/19(水) 13:25:53
エンタの神様って死ぬほどつまらん
それを真似されちゃぁねぇ
>>64
無理じゃないか・
66デフォルトの名無しさん:2008/03/19(水) 13:54:00
ComboBox1.SetFocus も ComboBox1.Valueでも開かないな

67デフォルトの名無しさん:2008/03/19(水) 14:07:00
ACCESSのフォームとVBAなら
DoCmd.GoToControl "コンボボックス名"
SendKeys "%{down}" , true
で開くけれどな
68デフォルトの名無しさん:2008/03/19(水) 15:46:57
セルをセレクトせずに、仮想セレクトによって、オフセットを使うことは
可能でしょうか。
69デフォルトの名無しさん:2008/03/19(水) 15:59:58
仮想セレクトって何?
70デフォルトの名無しさん:2008/03/19(水) 17:13:30
>>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で値をとって、そこから、
オフセットでセル移動をすることは出来ないですか?
71デフォルトの名無しさん:2008/03/19(水) 17:36:36
基本的に、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 = "済"
72デフォルトの名無しさん:2008/03/19(水) 17:54:41
>>71
あ、そういうことが出来るんですか。
ありがとうございます。早速試します。
73デフォルトの名無しさん:2008/03/19(水) 21:00:41
必要ないというか、値を取得するだけなのに、そのためにセルのSelectやActivateをする
ってのはダメプログラムの良い証拠
74デフォルトの名無しさん:2008/03/20(木) 01:22:17
質問です、行番号を変数redord_lineに取得する
スタート列変数 start
ゴール列変数 end
上記の3つの変数を使って指定したレコード範囲だけ色を変更することは
できるのでしょうか?色は何色でもいいです。
75デフォルトの名無しさん:2008/03/20(木) 01:38:28
できます
76デフォルトの名無しさん:2008/03/20(木) 02:22:59
Range(Cells(Row1,Col1),Cells(Row2,Col2))..Interior.Color = COLORREF
77デフォルトの名無しさん:2008/03/20(木) 11:33:41
すいません、関数の引数にString型の配列を渡しているのですが
型が一致しませんとでてしまします。原因がわからないので教えてください。


Dim hogehoge(999) As String

'関数呼び出し
method(hogehoge)
---------------------------------------------

'関数実体
Function method(hogehoge() As String)
78デフォルトの名無しさん:2008/03/20(木) 12:06:11
あれ?ここって全然ひといない?
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
8177:2008/03/20(木) 13:20:50
>80
あざーす。
エラーは回避できたんだけどなぜCallをつけると
エラーがでなくなったのかという根本的な原因がよくわからなかったんでありますが
なぜかわかります?データ型の不一致っていうと根本的に
構文の使い方そのものが間違ってるイメージがあるんですが・・

Callステートメントについて少し調べたんだけど
このステートメントの役割は関数の呼び出しを明示的に宣言しているのと
参照渡しと値渡しの使い分けをこっちでしなくて済むってことらしいんですが

82デフォルトの名無しさん:2008/03/20(木) 13:23:59
Dim hogehoge(999) As String

'関数呼び出し
method(hogehoge)
---------------------------------------------

'関数実体
sub method(hogehoge() As String)
83デフォルトの名無しさん:2008/03/20(木) 17:19:36
トリビア
明示的という日本語は存在しない
84デフォルトの名無しさん:2008/03/20(木) 17:33:50
そんなしょうもねぇ揚げ足とるくらいなら糞して寝てろや・・・
85デフォルトの名無しさん:2008/03/20(木) 17:48:37
普通に戻り値だと
strTEXT = method(hogehoge)

実行したいだけだと
call method(hogehoge)

と使ってきたので、なぜと言われても困るなぁ…
86デフォルトの名無しさん:2008/03/20(木) 18:13:15
要は戻り値がないメソッドを呼ぶときは
明示的にCallステートメントをメソッド名の前に付けなくてはならないという
暗黙の了解がVBAにはあるわけだ。あざーす
87デフォルトの名無しさん:2008/03/20(木) 18:15:06
>>83
あるよ
88デフォルトの名無しさん:2008/03/20(木) 18:35:11
言葉は生きてて、時代などを反映して生まれては消える。
広辞苑か何かに追加されてないといけないのか?
89デフォルトの名無しさん:2008/03/20(木) 18:38:11
>>86
VBAは初めて?
普段は何で書いてるの?
90デフォルトの名無しさん:2008/03/20(木) 18:48:11
>89
ヒミツのアッコちゃん
91デフォルトの名無しさん:2008/03/20(木) 18:57:23
ネタだと思ったが
ヒミツのアッコちゃん
っつー言語は本当にあるんだな
織田信長の乗りだな
92デフォルトの名無しさん:2008/03/20(木) 21:32:16
>>76さん
できました、ありがとうございます。
93デフォルトの名無しさん:2008/03/20(木) 22:01:16
method(hogehoge)だとhogehogeに()をつけてからmethodに渡すと解釈するからじゃなくて?
もしそうなら、methodと括弧の間に空白が置かれていると思うし、method hogehogeで呼べるはずってことだけど。
94デフォルトの名無しさん:2008/03/20(木) 23:02:30
日本語でおk
95デフォルトの名無しさん:2008/03/20(木) 23:17:53
日本語だとVBAが走りません
96デフォルトの名無しさん:2008/03/21(金) 02:21:41
メソッド(ほげほげ)
97デフォルトの名無しさん:2008/03/21(金) 05:40:24
漏れは括弧を付けて呼びたいのに
勝手に括弧を消されるのが気に入らない
98デフォルトの名無しさん:2008/03/21(金) 06:04:35
かっこわるい
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(”有”)と拾ってもらいたいのですが・・・
101デフォルトの名無しさん:2008/03/21(金) 12:14:06
>>100
なんとなく違う回避方法もある気がするが、
StrConv
で、小文字に統一してから比較する
102デフォルトの名無しさん:2008/03/21(金) 12:37:55
StrConv の使い方は フォ-マットですか?
それとも、dim name as StrConv と書くのでしょか?
103デフォルトの名無しさん:2008/03/21(金) 12:47:16
ヘルプ読め
104デフォルトの名無しさん:2008/03/21(金) 13:17:57
>>100
if name=textbox1 then
→If StrComp(name, textbox1, vbTextCompare) = 0 then

ところで、msgboxの()は必要なの?
105デフォルトの名無しさん:2008/03/21(金) 13:18:39
msgbox("変数同士は大文字小文字関係なく比較するのだが、" & vbnewline & _
      "textboxは厳密に判定するのか?")

' 実際にtextboxを配置してみての実験はしていない
106デフォルトの名無しさん:2008/03/21(金) 13:20:41
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 とうまくかみ合いません
再び、ご教授お願いします。
108デフォルトの名無しさん:2008/03/21(金) 15:28:00
最初からやりたいことを書きましょう。

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の違いが有ると拾わないみたいです。
111デフォルトの名無しさん:2008/03/21(金) 17:18:17
>>110
StrConv
112デフォルトの名無しさん:2008/03/21(金) 17:23:52
永久ループ
113デフォルトの名無しさん:2008/03/21(金) 18:07:08
トリビア

明示はサ変名詞なので的が付く対象ではない
したがって明示的というのは日本語風の言語使用方法に過ぎない
114デフォルトの名無しさん:2008/03/21(金) 21:14:50
>>113
なぜサ変名詞に的がついてはいけないの?
115デフォルトの名無しさん:2008/03/21(金) 23:06:23
VBAでオラクルのテーブル読めますか?
116デフォルトの名無しさん:2008/03/21(金) 23:57:02
よんだことあるけどしるか!ってかんじ
117デフォルトの名無しさん:2008/03/22(土) 00:37:29
>>115
excelからやると結構面倒
その辺になるとACCESSのほうがいいかも。
ODBC経由でオラクルのテーブルをリンクできるようにしてから、openrecordsetすれば簡単
118デフォルトの名無しさん:2008/03/22(土) 00:43:43
oo4oってもうないんだっけか
119デフォルトの名無しさん:2008/03/22(土) 12:49:32
Oracleに接続するぐらい別に面倒じゃない
VBSからでも使える程度のよくあるケース
120デフォルトの名無しさん:2008/03/22(土) 13:54:20
VBAってさぁ、ソース丸見えなんだけどさ見えなくできないの?
121デフォルトの名無しさん:2008/03/22(土) 14:51:54
パスワードをかければ、カジュアルなプロテクトはできる。
ただし、はずし方もググればすぐにわかるんだけどね・・・
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横に設定するには、どのように記述すればよろしいのでしょうか?
ご存知の方いらっしゃいましたら、宜しくご教示お願いします。
123デフォルトの名無しさん:2008/03/22(土) 20:48:45
ググッたらこんな使い方してたみたいだけど?
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"
125デフォルトの名無しさん:2008/03/23(日) 02:23:53
質問の内容がよくわからない。4製品?何に対しての?
5000以上っていうのはD4:F7全ての合計なのか
1個1個のセルの値が5000以上なのかなど
126デフォルトの名無しさん:2008/03/23(日) 02:53:39
4製品というのは例えばストーブ、掃除機、時計、テレビで
1個1個のセルの値が5000以上になるものです。合計は全く関係ありません。
4製品の全ての値が5000(円)以上になっているものに対してOKになるようにしたいのですが。
説明が下手ですみません。

127デフォルトの名無しさん:2008/03/23(日) 03:05:48
D4:F7って9セルあるけど?4製品?
128デフォルトの名無しさん:2008/03/23(日) 03:15:07
9セルじゃなくて12セルか
129デフォルトの名無しさん:2008/03/23(日) 03:16:31
すみません。金額の範囲はC4:F7でした。16セルです。
130デフォルトの名無しさん:2008/03/23(日) 03:53:41
これでお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
ご親切にどうもありがとうございました。
132デフォルトの名無しさん:2008/03/24(月) 15:54:55
ちょっとスレ違いかもしれませんが、教えてください。

以下のようにマクロを使わず、セルに入ってるデータをセルの位置として
指定して計算させたいのですが可能でしょうか?

SUM(A1のデータ:A2のデータ)


例えば、以下のようにデータが入力されているとき、

A1のセルに"B1"
A2のセルに"B10"

マクロを使わずSUM(B1:B10)が行われるようにするにはどうすればよいでしょうか?
133デフォルトの名無しさん:2008/03/24(月) 16:14:10
indirect()
134デフォルトの名無しさん:2008/03/24(月) 16:20:33
>>133
おー!ありがとうございます!!
135デフォルトの名無しさん:2008/03/25(火) 23:10:05
Excelを他のプログラムからCreateObjectして操作するときに、
そのEcelのオブジェクトのApplicationからメッセージボックスを
表示するようなことはできますか?Excelにマクロを定義しといて
呼び出すという方法じゃなくて、直接メッセージを表示するような
ことがやりたいです。
136デフォルトの名無しさん:2008/03/26(水) 01:20:08
できる
137デフォルトの名無しさん:2008/03/26(水) 01:29:29
そのためにわざわざExcel使うか?
138デフォルトの名無しさん:2008/03/26(水) 21:19:57
質問です。
VBAの処理のみでAccessに依存することなく、Accessのデータテーブルから
エクセルのシートにデータ内容をExportしたり、エクセルのシートの内容をデータベースに
Importすることはできるのでしょうか?
139デフォルトの名無しさん:2008/03/26(水) 23:03:13
>Accessに依存することなく、Accessのデータテーブルから
???
140デフォルトの名無しさん:2008/03/26(水) 23:20:00
>>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とか)をビューアなどで開かず、
直接印刷する方法を教えてください。
単純に印刷するだけならシェルを使って何とかなったのですが、
用紙サイズや向きの指定をしたく、その方法がまったくわかりません。
よろしくおねがいします
144デフォルトの名無しさん:2008/03/27(木) 07:01:01
>>138 >>141
ADOとかDAOを使えばそんな感じの事はできる
インポート/エクスポートとはちょっと違うけど
145デフォルトの名無しさん:2008/03/27(木) 11:30:02
セルをマウスでセレクトして外側は太い罫線、中は細い罫線をひくというような
共通で使えるVBAを作ったのでエクセルを開くたびに常にそのVBAを読み込みたいです。

現在は***.vbaファイルを保存しておき、そこからxlaファイルにしてそれをアドオンでエクセル起動時に読ませています。
これだとVBAを修正するときは、

新規でエクセルを立ち上げ

VBEで***.vbaを読み込み

編集後別名のxlaファイルに保存(同一ファイルはエクセル起動時に開かれるのでさわれない為)

エクセルを閉じ、作ったxlaファイルを設定しているxlaファイルに置き換え

と面倒な事になっています。※xlaファイルはダイレクトに編集できないようだ
みなさんは作ったVBAをどのように管理していますか?
146デフォルトの名無しさん:2008/03/27(木) 13:17:35
つ個人用マクロブック
147デフォルトの名無しさん:2008/03/27(木) 18:33:14
QueryTables.Add()メソッドで
Connection情報を指定する際に

Jet OLEDB:Engine Type=?

?に対してはどんな値を指定するのが妥当なんでしょうか?


ちなみに↓を見てたのですが全く意味がわかんなかったんです。。
http://www.microsoft.com/japan/msdn/data/techmat/ado/dao2ado_11.aspx
148147: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のシートの内容をデータベースに書き込むにはどうしたらいいですか?
150デフォルトの名無しさん:2008/03/27(木) 22:34:35
>>149
まあこの辺見るとかググるとかして頑張ってください
ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130.html
151デフォルトの名無しさん:2008/03/27(木) 23:00:59
指定フォルダ内の複数ファイルに対して
文字列の置換処理をしたいのですが
どのように書けばいいのでしょうか?
152デフォルトの名無しさん:2008/03/27(木) 23:07:35
ファイル開く→置換
153デフォルトの名無しさん:2008/03/27(木) 23:11:07
>>150さん
このサイトは見たことがありますが参考になりませんでした。
154デフォルトの名無しさん:2008/03/28(金) 00:43:16
>>153
そこに書いてあることが理解できない段階なら、
まじめにVBAの本を買って、勉強したほうがいいんじゃないかなと思う。
155デフォルトの名無しさん:2008/03/28(金) 02:24:22
>>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

参考になればよいですが。
156155:2008/03/28(金) 04:48:08
ちょっと修正

Next r の次から
---------------------------
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing

End Sub
---------------------------
157145:2008/03/28(金) 10:03:57
>>146

ありがとうございます。
個人用マクロ調べてみました。
これだと下記にファイルを置かれてしまうようなのですが、
管理するマクロファイルは任意の場所に置いて管理したいです。

C:\Program Files\Microsoft Office\Office\XLStart

何か方法はありますでしょうか。
158デフォルトの名無しさん:2008/03/28(金) 18:33:56
>>157
俺は
ツールバーにマクロのコマンド作る
159135:2008/03/28(金) 23:15:33
135なのですが・・・結局できないわけですか・・・。
160デフォルトの名無しさん:2008/03/29(土) 00:13:38
余裕でできる
161デフォルトの名無しさん:2008/03/29(土) 00:25:20
>>135
何で困ってるのかさっぱりわからん。
162デフォルトの名無しさん:2008/03/29(土) 01:48:52
application.assistant.doalert
or 余裕
application.executeexcel4macro "alert(...)"
or さらに余裕
application.executeexcel4macro "call(""user32"",""messagebox"",..."
or さらにさらに余裕
...
163デフォルトの名無しさん:2008/03/29(土) 12:35:12
>>135
もっと何をしたいのか具体例を挙げてくれないと
出来るとしか答えられん。
164デフォルトの名無しさん:2008/03/29(土) 15:01:22
>>163>>162
165デフォルトの名無しさん:2008/03/29(土) 15:23:42
>>161 >>163
>>140

まあ一応>>162で答え出てんじゃね
166デフォルトの名無しさん:2008/03/30(日) 19:16:39
OS WindowsXP
Excel 97
で、
a1.a2.a3.….an を
an,a1.….a(n-1) と並べ替えるにはどうしたらいいんでしょうか。
a1〜anは英数字、カタカナ、漢字です。
よろしくお願いします
167デフォルトの名無しさん:2008/03/30(日) 20:05:33
>>166
an
168デフォルトの名無しさん:2008/03/30(日) 20:06:16
みすったorz
anをa1のセルに移動(insert)するだけでいいんじゃないのか?
ってかXPでなんで97なんだ?
169デフォルトの名無しさん:2008/03/30(日) 20:06:21
エスパーさん、出番ですよ
170デフォルトの名無しさん:2008/03/30(日) 20:12:14
vbaじゃなくて並び替えですることだろ
171デフォルトの名無しさん:2008/03/30(日) 20:24:37
手早いレスありがとうございます。
>>168
一つのセルの中に「.」で区切られた状態で入っているので・・
97なのはwin95のPCで読めるようにしてたのかと。。

>>170
どのようにすればいいんでしょうか
172デフォルトの名無しさん:2008/03/30(日) 20:26:48
>>171
それは本当にVBAでやらなきゃならんことなのか?
後ろから「,」を検索してその位置以降の文字列を前に持ってくるだけだろ?
Excelの関数で事足りると思うのだが?
173デフォルトの名無しさん:2008/03/30(日) 20:29:22
>>172
並び替え以前は全て「.」で区切られているので・・
またデータが大量にあるためマクロで処理したいです。
174デフォルトの名無しさん:2008/03/30(日) 23:35:03
>>173
1.関数で別シートに写像
2.シート全体を選択してコピー→値の貼り付け
175デフォルトの名無しさん:2008/03/30(日) 23:36:48
>>166

あ.い.う.え.お
と並んでいるものを、
お.あ.い.う.え
と並べたいのか?


お.え.う.い.あ
と並べたいと言う意図だとan,a1.….a(n-1) はおかしいし・・・
意味が分からん。
176デフォルトの名無しさん:2008/03/30(日) 23:44:36
たくさんの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
いいんじゃね?
あとは自作関数化すれば何セルあっても動作するするだろ
それくらいは自分でなんとかすればよし、というところか。
181166:2008/03/31(月) 00:39:56
>>174
どうもです
>>175
あ.い.う.え.お
と並んでいるものを、
お,あ.い.う.え
です。 「お」の後がコンマになってます。
>>177-180
ありがとうございます。
おきてからやってみます
182179:2008/03/31(月) 00:48:02
>>181
おの後ろはカンマにしたかったのか。
それは実装できてないわ。
まぁ、ドットで区切って、並び替えて、再結合は実現しているので、
あとは別に苦労しないだろ。
183デフォルトの名無しさん:2008/03/31(月) 01:54:26
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
184デフォルトの名無しさん:2008/03/31(月) 02:09:14
行頭から半角5文字目の空白を;に変えたい
185デフォルトの名無しさん:2008/03/31(月) 08:11:53
>>183


>>166 [Excel97]
×InStrRev
186デフォルトの名無しさん:2008/03/31(月) 10:21:31
>>179
なんだその吐き気がするコードは。
Excel97にはSplitすらないのか?
仮に無いとしても、>>172で十分だろ。
187デフォルトの名無しさん:2008/03/31(月) 10:23:08
いちいち"."で分割して結合する意味がわからん
188デフォルトの名無しさん:2008/03/31(月) 11:14:25
>>186
97にはsplitもなければInstrRevもない。
189デフォルトの名無しさん:2008/03/31(月) 11:22:56
Replaceもなかったりする
190デフォルトの名無しさん:2008/03/31(月) 11:24:40
191デフォルトの名無しさん:2008/03/31(月) 11:27:35
意味なんてものはその職場の風習によるだろ。
192デフォルトの名無しさん:2008/03/31(月) 11:29:51
>>191
意味わからん
193デフォルトの名無しさん:2008/03/31(月) 11:32:30
あー、糞コードを量産する職場だったら、>>179を見ても違和感がないという意味か
194デフォルトの名無しさん:2008/03/31(月) 11:38:41
instrくらいあるだろ
195デフォルトの名無しさん:2008/03/31(月) 11:42:39
>>166で意味がわからんって、どんだけ読解力無いんだよ・・・
196デフォルトの名無しさん:2008/03/31(月) 11:47:25
197166:2008/03/31(月) 20:28:10
>>182
上手くいきました。 ありがとうございます。

>>他住人の方
ありがとうございました。
198デフォルトの名無しさん:2008/03/31(月) 21:12:14
まあ確かに>>179のコードはアレだが、問題が解決する側にとっちゃどーでもいい話ではあるな
199デフォルトの名無しさん:2008/03/31(月) 22:24:02
見苦し
200デフォルトの名無しさん:2008/04/01(火) 05:44:27
>>182
なんでこいつこんなにえらそーなんだ
201デフォルトの名無しさん:2008/04/01(火) 08:34:03
VBA使いは総じてえらそう
202デフォルトの名無しさん:2008/04/01(火) 09:16:55
>>1-201
質問者以外全部えらそーに見える俺は文盲
203デフォルトの名無しさん:2008/04/01(火) 09:51:32
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のテーブルだけを
新規ブックシートに書き込みたいです。どうすればいいでしょか?
206デフォルトの名無しさん:2008/04/02(水) 03:55:51
>>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

'***** つづく*****
207206: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で言う「構造体の配列」みたいなのは、
なにで実現するのでしょうか。
209デフォルトの名無しさん:2008/04/02(水) 10:19:58
ユーザ定義タイプの配列
210デフォルトの名無しさん:2008/04/02(水) 12:42:58
ユーザーフォーム上のコマンドボタンを押したとき
ボタンのオブジェクト名を変数に格納する方法ってありますかね?
211デフォルトの名無しさん:2008/04/02(水) 12:43:45
↑あ、質問間違えた。無視していい。
212デフォルトの名無しさん:2008/04/02(水) 22:51:53
>>206.207さん大変貴重な情報ありがとうございます。さっそく試してみます。
明日に結果を報告します。
213デフォルトの名無しさん:2008/04/04(金) 13:05:00
いつのまにかVBEのマウススクロールができるようになってたんだが。。
なんで??

Excel2003
214デフォルトの名無しさん:2008/04/04(金) 15:59:16
ユーザ定義関数で説明文を書くには
MacroOptionsを使えばよい事がわかりましたが、
引数ごとの説明文を設定するのはどうしたら
良いですか?
215デフォルトの名無しさん:2008/04/04(金) 19:45:26
質問です。

Application.visible = falseで本体を隠したユーザーフォーム上のコマンドボタンを押すと
新しいウィンドウでExcelのファイルを開くようにしたいのですが、どうしたらいいですか。
216デフォルトの名無しさん:2008/04/04(金) 21:14:38
そういうふうにすれば?
217デフォルトの名無しさん:2008/04/04(金) 23:53:05
>>213
たぶんマウスのドライバ。MSのIntelliPoint使ってるだろ?俺もなってた。
218デフォルトの名無しさん:2008/04/05(土) 14:39:37
>>217
確かにマウス交換した。そういうことかー。サンクス
219デフォルトの名無しさん:2008/04/05(土) 17:09:01
まさかと思うが、VB6のVBEでもスクロールできるようにするプラグインがあるのもご存じない?
220デフォルトの名無しさん:2008/04/05(土) 19:59:18
VB6はわかりませんがどこでもホイールはまさかしたら
221デフォルトの名無しさん:2008/04/06(日) 22:54:34
222デフォルトの名無しさん:2008/04/07(月) 12:07:05
>>213
解決したみたいだけど sp3で 普通にできるようになったよ
223デフォルトの名無しさん:2008/04/07(月) 15:12:34
>>221
このアドインはバグがあるからダメ
224デフォルトの名無しさん:2008/04/07(月) 15:29:08
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) までを選択する方法を教えて頂けたらば幸いです。

何卒ご指導をよろしくお願いします。
227デフォルトの名無しさん:2008/04/07(月) 22:33:10
>>266
Range(Cells(hoge,1), Cells(piyo,3)).Select
たしかRangeとcellsは同シートじゃないとエラー出るのに気をつけてね
228デフォルトの名無しさん:2008/04/08(火) 01:19:11
>>225
確かExcel再起動しない限り不可能だったようなことをどこかで読んだ記憶がある。
で、シートの追加・削除を行うマクロを長時間起動したままだとそのうち落ちるとかだったかな?

あいまいでごめん。
229デフォルトの名無しさん:2008/04/08(火) 12:59:51
一つのセルに複数のセルを代入したいのですが、どうやればいいですか?
一つの場合
Sheets("シート1").Range("C1") = Sheets("シート2").Range("D9")
というようにやっているのですが、二つ以上になって
Sheets("入力シート").Range("C1") = Sheets("共通設定シート").Range("D9:E9")
みたいにやると、何も表示されなくなってしまいます。
230デフォルトの名無しさん:2008/04/08(火) 13:10:14
>>229
何がしたいのか理解できない
231デフォルトの名無しさん:2008/04/08(火) 13:25:50
>>230
下の例間違ってました。訂正。
Sheets("シート1").Range("C1") = Sheets("シート2").Range("D9:E9")

やりたいことは、例をあげると
シート2のD9に「あい」と入っていてE9に「うえお」と入っているとすると
シート1のC1には二つ繋がった結果「あいうえお」と入れたいです。
232デフォルトの名無しさん:2008/04/08(火) 13:48:32
vbaでやりたいなら、range("d9"),value & range("e9").value
ワークシート関数でいいなら、concatenate
233デフォルトの名無しさん:2008/04/08(火) 14:08:14
>>232
ありがとうございます!出来ました!
234デフォルトの名無しさん:2008/04/08(火) 15:05:42
プリンタのトレイを指定して印刷したいのですが
どうすりゃいいのか惜しえてください
235226:2008/04/08(火) 21:01:07
>>227
上手く選択することが出来ました!
これで作業に幅が出たと思います。

本当にありがとうございました。
236デフォルトの名無しさん:2008/04/08(火) 23:22:30
2003 XP autofilter filtermode 等
「sheet2 range("A1") に、オートフィルターがかかっている(又は、オートフィルターモード)なら、
オートフィルターを解除し、
オートフィルターがかかっていないなら、何もしない。」
どう書いたらいいですか?
237236:2008/04/08(火) 23:24:46
揚げ忘れたwww
238236:2008/04/08(火) 23:48:02
次で解決しました。
Sub filter0()
With Sheet2
If .AutoFilterMode = True Then
.AutoFilterMode = False
End If
End With
End Sub
239236: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がでます。
この実行時エラーの原因がさっぱりわかりません。

どなたか詳しい方お教え願えないないでしょうか?
242デフォルトの名無しさん:2008/04/10(木) 01:03:15
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でやりたいので困ってます。
244デフォルトの名無しさん:2008/04/10(木) 15:27:39
Sheets("Sheet1").Range("B5").AutoFill Destination:=Sheets("Sheet1").Range("B5:B35")
245デフォルトの名無しさん:2008/04/10(木) 15:29:24
>>244
ありがとございます、できました
246デフォルトの名無しさん:2008/04/10(木) 15:38:17
マクロの記録で「Selectionは使わない」「Rangeをいつでも明示する」ってオプションがあって、
それがデフォルトでもいい気がする。
247デフォルトの名無しさん:2008/04/10(木) 15:41:19
>>246
やってみます、ありがとう!
248デフォルトの名無しさん:2008/04/10(木) 15:45:53
あ、いやいや、そういうオプションがあったらいいな〜
もしあったら、デフォルトはこれがいいな〜
って妄想なので・・・
249デフォルトの名無しさん:2008/04/10(木) 15:47:20
>>248
なるほど、そういうことですか
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

おねがいします
251デフォルトの名無しさん:2008/04/10(木) 15:54:27
もう一ついいでしょうか
フォントの色を変える方法はセルを指定するしかないのでしょうか?
表を作っていてさっき質問したB5~B35に入る曜日の土日だけ赤にしたいと思っています
しかし月によって、どこに土日が入るかわからないのでセル指定ではなくて変数などを指定してやる方法はありますか?
ちなみにSelect文を使って変数の中身を替えています
252デフォルトの名無しさん:2008/04/10(木) 16:15:12
>>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
253デフォルトの名無しさん:2008/04/10(木) 16:19:40
>>251
マクロじゃなくていいなら「条件付書式」。
マクロなら、
for each cell in worksheets("sheet1").range("B5:B35")
if cell.value = "土" or cell.value = "日" then
'interiorがうんたらかんたら
end if
next
254デフォルトの名無しさん:2008/04/10(木) 16:20:41
>>253
こればっかりはしょうがないですよね、ありがとうございます!
255デフォルトの名無しさん:2008/04/10(木) 16:38:20
>>252
動きました!!ありがとうございます!!
ですが、sheet3をクリックすると、一瞬だけ表示されて消えてしまうのですが…
256デフォルトの名無しさん:2008/04/10(木) 17:02:21
>>255
どんな現象か良くわからんけど、"Sheet3"を"sheet3"にすると解決する?
257デフォルトの名無しさん:2008/04/10(木) 17:39:30
>>256
そ、それだった!
解決しましたありがとうございます。
本当に助かりました。ご迷惑をおかけしました
258デフォルトの名無しさん:2008/04/10(木) 22:19:48
知恵をお借りしたく、書き込みいたしました。

OS:XPSP2
excel:2003

グーグル先生にお聞きしてみたところ、どうも答えが返ってこないため、こちらに書き込みいたしました。
Excelを利用して、
@Webの検索フォームにA列に記載された文字列を入力し検索
A表示されたページの指定したテキストボックスに記載された文字列をB列に貼り付け
を繰り返すマクロを組もうと頑張っているのですが、どうにもAが解決できません。

できればお知恵を貸していただけないでしょうか?
宜しくお願いします。
259デフォルトの名無しさん:2008/04/10(木) 22:53:35
一概には言えない。
どのページか書いたら、答えが返ってくるかもな。
260デフォルトの名無しさん:2008/04/11(金) 00:05:31
ちょっと外部には出せない類のページでorz

こちらもphpで生成されたhtmlのページしか見れないため、htmlのソースからデータを取り出す形でやっているのですが...

文字列の部分だけを改変したhtmlのソースなら見せられると思うのですが、それでは駄目ですか?
261デフォルトの名無しさん:2008/04/11(金) 00:29:57
なんだ、それなら文字列検索すればいいじゃん。
何が問題なんだ?
262デフォルトの名無しさん:2008/04/11(金) 00:40:18
>>260
大事な情報扱ってるなら2chなんか頼るな
プログラム板、プログラマー板、ソフトウェアー板を徘徊して
ネタ探し回ってる奴いてるよ
解答者の振りして「それじゃ答えられない」「もっと具体的に」と
最後はネタパクられちゃうからね
もしくは「それは素人には無理。業者に出す仕事だ。」色んな言葉で揺さぶられるだけ
動的HTMLは俺も扱った
ここの板で聞いたけどいくら質問しても答えなんかない。
それよりファイル操作できる(ファイルの読み書きできる言語)調べろ
2chで調べたらダメだよ
解答者装った変なのが張り付いてるから
図書館やインターネットで調べてネタは誰にも言うな。
ファイルの読み書きだ。
くどい様だけどマジで2chの板は気おつけろよマジレス。
263デフォルトの名無しさん:2008/04/11(金) 00:59:00
>>262
ありがとうございます。
他の板だと、色々とあるんですが、初めてヌクモリティを感じました。
お世話様でした。ありがとうございます。
264デフォルトの名無しさん:2008/04/11(金) 01:08:35
>>262
そんなコストパフォーマンスが悪いことやってるの、引きこもりくらいだろwww
265デフォルトの名無しさん:2008/04/11(金) 01:23:15
被害妄想
266デフォルトの名無しさん:2008/04/11(金) 01:45:39
バリバリのマクロ使いは質問者の2〜3行読んだだけで
何を意としているかはわかってるよ
わかった上で「それじゃよくわかんないよ」「もう少し具体的に」
それじゃこれか!
わざとずれた解答のマクロ出してくる
質問者は一気に信用する
質問者が自分で改編できないことは解答者はわかってるw
やがて改めて聞きに来るのはほぼ確実。
あとは「もう少しだから頑張ろう」とか適当に良きアドバイザーを装って
ネタぱくったら、さよならベイビーwww
解答者の計算どおりネタはぱくって答えは出さない

計算どおりにいきそうにないときは多数を装い
マナーだの常識だの礼儀だの罵倒する役柄と
優しさと知識を持ち合わせた解答者が入り混じる
少しくらい教えたところでこんなトコで質問してるレベルの奴に改編なんか無理。
質問者は解答してもらいたいのでペコペコしながら
最後は言われるがままw
偽解答者は初めからわかってるんだよ
とくにファイル操作関係は気をつけたほうがいい
VBAに限らず他の言語もね
267デフォルトの名無しさん:2008/04/11(金) 01:54:22
病院行った方がいいよ
268デフォルトの名無しさん:2008/04/11(金) 01:55:59
そちらからお先にどうぞ
269デフォルトの名無しさん:2008/04/11(金) 02:02:19
なにこいつ
270デフォルトの名無しさん:2008/04/11(金) 02:31:16
なんかすごい長文で不安煽ってるのがいるが安心しろ
オレがじゃんじゃん答えてやるから、そのままHTMLをうpれ
271デフォルトの名無しさん:2008/04/11(金) 02:37:53
プッ
んじゃタグ抜きマクロでも書いてみ
リンク、object、span ヨロチクビ
それ見てから質問するか考えるわw
272デフォルトの名無しさん:2008/04/11(金) 02:58:31
>>258
は、どう見てもパクるに値するネタでない事だけは確かw
273デフォルトの名無しさん:2008/04/11(金) 03:09:59
どうみても金儲け絡んだ情報収集にみえますが
次のレスでは>phpで生成されたhtml
ピンポ〜ン!99%の確立で当たりましたね
274デフォルトの名無しさん:2008/04/11(金) 10:58:32
頼むからコテつけてくれ。あぼんするから。
275デフォルトの名無しさん:2008/04/11(金) 22:01:41 BE:378334793-2BP(380)
やっぱ Excel VBA で マルチスレッディングって 無理?
276デフォルトの名無しさん:2008/04/11(金) 22:15:07
Excel 2003 のVBA の言語仕様書ってどこかにないでしょうか。
277デフォルトの名無しさん:2008/04/11(金) 23:40:11
やるならマルチプロセスだな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
279デフォルトの名無しさん:2008/04/12(土) 13:45:27

'標準モジュール------
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
280278=279:2008/04/12(土) 14:10:33
自己解決しました
ものすごく恥ずかしい質問をしてしまいました><
281デフォルトの名無しさん:2008/04/12(土) 16:53:54
>>277 kwsk
282デフォルトの名無しさん:2008/04/12(土) 17:06:14
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だとどのような弊害があるのでしょうか?

常識的な事を質問してすみません。
どなたかご教えて頂けませんか?(>_<)
284デフォルトの名無しさん:2008/04/14(月) 00:06:12
なんで指摘した人に聞かないの?
285デフォルトの名無しさん:2008/04/14(月) 00:25:53
>>284
ご指摘頂いたかたに何度か理由をお聞きしましたが、
常識なんだから当たり前と明確な裏付けを貰えなくて、
それで知人や本、ネットで調べても分からずじまいで、
ご質問させて頂きました(>_<)
286デフォルトの名無しさん:2008/04/14(月) 03:22:55
Line.ForeColor.RGB使ってたときは左辺にどんな値を代入してたの?
287デフォルトの名無しさん:2008/04/14(月) 03:29:49
あ、ごめん書いてたなwwww(ゲラプゲラオプスwww

たぶんあれだろ。RGB値だと何の色を指定してるかわからりずらいからだろ。
っつってもどっちもマジックナンバー状態だから(ry
っつーかつい最近はじめてVBAさわった俺からすると
コンパイラの方でこういう色の値は予約語としてもっとけと思ったな
288デフォルトの名無しさん:2008/04/14(月) 03:56:11
それを答えるために詳しく聞いてたのかよ
なんだこいつ
289デフォルトの名無しさん:2008/04/14(月) 07:31:44
わかりづらいなら定数定義すりゃいいだけだしよくわからんな
290デフォルトの名無しさん:2008/04/14(月) 20:01:59
>288-289
全然俺の言いたいことを理解してないな。
さすがVBAしかさわったことのないゴミどもだwwwwwwwww
ちょろっと触った感じ、他のコンパイラと比べて
半端なく使いづらいからVBAそのものが昔から進化してねぇんだろうな。
まぁお前等のレベルもそこで停滞してるのもしゃあねぇわなwwww
291デフォルトの名無しさん:2008/04/14(月) 20:58:09
VBAを学ぶのにオススメの書籍を紹介してください.
VBAは全く初めてですが,C,fortranならそこそこ使えます.
よろしくお願いします.
292デフォルトの名無しさん:2008/04/14(月) 21:43:08
マクロを記録して生成されたソースを見るのが一番参考になる
293デフォルトの名無しさん:2008/04/14(月) 21:49:00
なるほどwww
294デフォルトの名無しさん:2008/04/14(月) 22:29:42
今日は釣果がいまいちですね
295デフォルトの名無しさん:2008/04/14(月) 23:08:49
Application.quit
ThisWorkbook.close savechange=false

でExcelを終了させているのですが、
5回に1回くらいプロセスが残ることがあります。
GUIは消えてるのですが・・
Excel2003です。

296デフォルトの名無しさん:2008/04/14(月) 23:20:38
未解放のリソースが残ってるんじゃねーのか?
297デフォルトの名無しさん:2008/04/14(月) 23:28:10
>>296
特に無いと思います・・
DBとか使って無いし
ファイル出力はそのたびクローズしてるんで。

そもそも、リソース未開放だとプロセス残るんですか?
298283: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使用者の常識では無さそうですね。

299デフォルトの名無しさん:2008/04/15(火) 00:39:13
個人的には、RGB(255, 10, 10)が(RGBの順だという前提で)やや白い赤とすぐ判るが。

Excelのオペレーションで考えると、自由に色を使うと言う感じではなく規定の色から選択して使うイメージだよね。
その色がSchemeColorなんだから、VBAをExcelのオペレーションの延長と捉えるならその方がいいということなんでは?
300デフォルトの名無しさん:2008/04/15(火) 00:40:43
>>299
俺もそうだと思う
301283:2008/04/15(火) 00:59:05
>>299
>>300

返答ありがとうございます。

>Excelのオペレーションで考えると、自由に色を使うと言う感じではなく規定の色から選択して使うイメージだよね。
規定色で書かれた図形とは、違う色としたい要件でしたので、
規定色は使わずに赤=0〜255, 青=0〜255, 緑=0〜255を自由に選ぶようにしていました。

色の自由度が求められる要件で、あえて色の制約があるSchemeColorの方が良いのかが分からないのです(>_<)
302デフォルトの名無しさん:2008/04/15(火) 01:07:56
>>301
その用件を知らないんじゃなく?
知ってたらあり得ないだろ
303デフォルトの名無しさん:2008/04/15(火) 01:16:14
>>301
おまいにひとつ教えてやろう
Excelでは、「赤=0〜255, 青=0〜255, 緑=0〜255を自由に選ぶ」
ってのは無意味
Excelで表現できるのは、パレットに登録されてる56色のみ
「赤=0〜255, 青=0〜255, 緑=0〜255を自由に選ぶ」をしたところで、
56色の中から一番近い色が選ばれるだけだよ
304283:2008/04/15(火) 01:16:59
>>302
もちろん、そのご指摘したかたは要件を知っています。

VB/VBAの使用者なら誰もが知っている常識と言われて
しまったので私がただ単に無知なだけと思っていましたが、
やはり302さんが仰るとおり、有り得ないことみたいですね。
305283:2008/04/15(火) 02:52:06
>>303

それはセル等に適用されると言うのは当然その通りだと思います。
今回の対象のシェイプにもは適用されないのでは無いでしょうか?

実際に試してみると分かると思いますが、少しずつ値を変えて、
並べて表示していくと、56色以上同時に表示出来ますから。
306303: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 低脳って事で、
俺はおまいが正しいと思うよ
307デフォルトの名無しさん:2008/04/15(火) 05:27:02
>>306
>>305じゃないけど
あんた漢だよ
308デフォルトの名無しさん:2008/04/15(火) 19:46:38
>規定色で書かれた図形とは、違う色としたい要件

(;´Д`)何この要件・・・
「ある規定色で描かれた図形とは別の色を使う」って意味じゃねぇのか?www
Excelで規定された色と違う色を使うことになんの意味がるんだと小一時間(ry
要件も理解する側がアホだったらとんでもない意味に変化するからな。
まず常識的に考えて(ry
309デフォルトの名無しさん:2008/04/15(火) 21:50:25
!?
310デフォルトの名無しさん:2008/04/15(火) 22:17:58
“不運(ハードラック)”と“遭遇(ダンス)”だぜ?
311デフォルトの名無しさん:2008/04/15(火) 23:57:19
283 303ではないけれど、
そいや、昔のverで、色の指定でRGB値だとうまく行かなくて
あれれーと思っていろいろ実験したなぁ。
確かに出来るやつと出来ないやつがあって、調べたけど、結局
>>303
と同じ考えに至って自分を納得させたことがありました。
312デフォルトの名無しさん:2008/04/16(水) 00:02:45
自分勝手に色決めてると白黒印刷でわけわかんなくなる可能性大
313283:2008/04/16(水) 01:14:55
>>303
>>306
ひとまず303のさんのおかげで、VBAの図形に関しては、制約が無い事が実証されました。
この質問スレ見てる人達の共通認識になったと思うので、これで良かったと思いますよ。
ありがとうございました。
314デフォルトの名無しさん:2008/04/16(水) 01:20:12
文字が入っている終端のセルを指定する方法はちらほら見かけるんですが、
一番先頭のセルから終端までを選択する方法ってありますか?

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行を削除

どうかよろしくお願いします。
315303:2008/04/16(水) 01:32:45
>>314
Range("A1").Resize(Range("A1").End(xlDown).Row - 1).EntireRow.Delete
316314:2008/04/16(水) 08:36:38
>>315>>303
たった一行で! ありがとうございます
これで仕事もはかどります。本当に助かりました

317デフォルトの名無しさん:2008/04/16(水) 09:09:35
エクセルで
VBAを使うのは
地獄に落ちる
最適手段

アクセスで
VBAを使うのは
神の身許に
至る近道
318デフォルトの名無しさん:2008/04/16(水) 13:46:42
エクセルからアクセスへステップUPするのは、比較的大変なんですか?
319デフォルトの名無しさん:2008/04/16(水) 14:04:26
そういうもんじゃないし
320デフォルトの名無しさん:2008/04/16(水) 17:52:39
>>318
君のアタマの柔軟性次第。
321デフォルトの名無しさん:2008/04/16(水) 19:03:22
エクセルは未来のアクセスで
アクセスは未来のエクセル也
地獄と極楽を永劫回帰
322デフォルトの名無しさん:2008/04/19(土) 00:24:35
ようやくうちの会社の全PCにアクセスが入ったんだが
何に使うのかよく分からない
アクセスだとできるけどEXCEL+VBAだとできないことって何?
楽で見栄えが良くなるってだけなのかな?
EXCELVBAはそこそこ使えるようになったが
アクセスを勉強するか、エクセルをさらに研鑽するか迷う
323デフォルトの名無しさん:2008/04/19(土) 01:30:45
>>322
C++などからもデータベースにアクセスできるとかじゃね?
そりゃ、C++でもExcelはいじれるけど・・・
324デフォルトの名無しさん:2008/04/19(土) 06:14:05
>>322
Excelも便利だがAccessもいいぞ。
業務アプリのGUIも作れるし、百万件ぐらいのデータ処理とかも可能。
RDB+VBA+レポート。
何でも出来てしまうので、何でもやりすぎてしまう。
そんなツール。
325デフォルトの名無しさん:2008/04/19(土) 06:55:20
Excelを正しく使わないと会社はすぐ、Access等のDBを導入しようとするが
そこに待っている世界は....
326デフォルトの名無しさん:2008/04/19(土) 06:57:49
>>322
エクセルを研鑽するにしてもアクセスのようなデータベースを知ってからのほうがいいです。
エクセルしか知らないと斜め上のテクニックばかりに身に付いちゃうかもね。
327デフォルトの名無しさん:2008/04/19(土) 07:29:25
EXCELの典型的斜め上テクニック

串刺し演算
セルの結合
複雑な集計はVBAで
報告書、仕様書、企画書その他何でもEXCELで
328デフォルトの名無しさん:2008/04/19(土) 08:29:18
>>322
例えばファミレスの注文データベースを作るとします。
一回の注文には複数の料理が含まれるとして

注文件数の合計
料理別の数量合計

を計算したい時、あなたならどんな表を作って集計しますか?
329デフォルトの名無しさん:2008/04/19(土) 10:25:45
>>328
お前がAccessで作ろうと思ってる表と同じもの
330デフォルトの名無しさん:2008/04/19(土) 10:41:03
もっとrelationalなもの作るだろ?(それなりに高いスキルは要るが)
Accessのデータ構造は単純に日付/客ID/料理ID/点数
で決まり。必要に応じてSQLで集計する。
331デフォルトの名無しさん:2008/04/19(土) 10:55:25
Excelでも同じ構造でいいじゃん。何か不都合でも?
332デフォルトの名無しさん:2008/04/19(土) 11:24:43
ファミレスごときのメニューでリレーショナルなものってwwwwww(ゲラプッチョwww
高いスキルってwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
333デフォルトの名無しさん:2008/04/19(土) 12:28:23
EXCELだと一定数のデータの集計だと
中間集計取りながらリアルタイムで全体見ながら
データ入力出来るから集計は早い。
だが、どんどんデータが入ってくるよう
な対象には弱い。量が増えてくると
ニーズも増えて、細かい集計項目追加の嵐
魑魅魍魎になって作成者も理解できなくなる
こういった対象にはDBのほうがまだ強い
ってか、こういったニーズを解決する為に
DBが作られた(とも言える)
334デフォルトの名無しさん:2008/04/19(土) 14:30:27
>>322
素人レベルならエクセルで十分だと思うよ

>>323
ほとんど関係ないよ

>>333
大筋は合ってるけどDBってのは戦後からある概念だよ。
DB→Accessの意味で言ってるのかな?
335デフォルトの名無しさん:2008/04/19(土) 16:21:45
戦後って久しぶりに聞いたわ
336デフォルトの名無しさん:2008/04/19(土) 16:23:15
もはや戦後ではない
337328:2008/04/19(土) 17:18:29
>>330が示したモデルでいいでしょう。
客IDだとお客さんをIDで区別してそうな印象を与えそうなんで注文IDと呼びかえますね。
さらに何番の席で受注したか、その席は禁煙席か喫煙席かも記録しましょうか。

日付/注文ID/席番号/喫煙区分/料理ID/点数/
338328:2008/04/19(土) 17:33:28
24番の禁煙席に案内したお客さんが、やっぱり55番の喫煙席に移動したいと希望したら、データもそれにあわせて訂正したいですよね。
Excelだとこの場合、席番号と喫煙区分を何行も書きかえないといけません。
この時、席番号だけ直して喫煙区分を直し忘れたりしないように気を付ける必要もあります。
339デフォルトの名無しさん:2008/04/19(土) 17:43:11
いや、それはどう考えてもExcelの使い方が悪い。
340デフォルトの名無しさん:2008/04/19(土) 17:59:15
どう考えたんだよ
341328:2008/04/19(土) 18:00:51
Accessなどのリレーショナルデータベースではこのような問題が解決できる仕組みが提供されています。


>>339
まあお好きなように。

342デフォルトの名無しさん:2008/04/19(土) 18:21:09
Excelは横展開でデータを記載しないと使い勝手悪い。
Accessは縦展開でデータを追加してかいて、用途に応じて必要な表に組み合わせる。
343デフォルトの名無しさん:2008/04/19(土) 19:58:47
データの持ち方次第でAccessだって修正箇所多くなるだろ?
どの座席が喫煙/禁煙なのかなんて予約データに関係ないんだから別の場所にあればいいじゃん。
「Aさんは24番の禁煙席を予約している」じゃなくて「Aさんは24番を予約している」「24番は禁煙席である」だろ?
データ構造(設計)にExcelやAccessが関係してくるのか?
344328:2008/04/19(土) 20:59:31
>>343
正規化のことを言っているのですね。
おっしゃる通り、喫煙区分は席番号に従属しています。従属の解消はExcelでも簡単です。VLOOKUPを使えばいいのです。

Excelが苦手なのは注文と料理のような一対多の関係を扱うことです。
345デフォルトの名無しさん:2008/04/20(日) 01:23:54
マスタの種類が増えれば増えるほどLOOKUP系では扱いづらくなるな
VBAで条件増やしたLOOKUP亜種を作成しても良いけど、自分だったら素直にSQLを
書くほうを選ぶ
346デフォルトの名無しさん:2008/04/20(日) 15:29:49
Enabledでテキストボックスをロックしたときに文字の色が変わらないようにしたいんだが、できるか?
347デフォルトの名無しさん:2008/04/20(日) 15:30:50
できるがお前の態度が気に食わない
348346:2008/04/20(日) 19:04:54
すまなかった。他のことは出来るんだが、なぜかこればかりは頑張って探しても見つからなかったんだ。
人に聞くってのは、勇気がいるもんなんだぜ。こんな質問のために荒れるのはいやだろ?さぁ教えてくれ。
349デフォルトの名無しさん:2008/04/20(日) 19:10:22
なんだそりゃ脅迫か?
350デフォルトの名無しさん:2008/04/20(日) 19:11:14
>>348
できるか?に対してちゃんと「できる」って言ってくれたんだから
贅沢言うなよ
351デフォルトの名無しさん:2008/04/20(日) 20:11:10
>>348
荒れるのは嫌だが、お前に教えるのはもっと嫌だ。
352デフォルトの名無しさん:2008/04/20(日) 20:29:04
荒れて結構w 誰も困らないスレだwww
353デフォルトの名無しさん:2008/04/20(日) 20:43:40
あるシートに在るセルの内容を
別のシートにコピーするにはどうしたらいいですか?

シート名はプログラム内に書き込まれてあって、
もしコピー先のシートがなければ、新規にシートをつくりたいのです。
354デフォルトの名無しさん:2008/04/20(日) 20:53:22
>>353
その操作をキーボードマクロで捕捉してみたら?
355デフォルトの名無しさん:2008/04/20(日) 22:52:39
>>354
頭良いですね。
ありがとう。
356デフォルトの名無しさん:2008/04/21(月) 18:45:55
>>355
普通。俺は何もプログラミング言語分からず、VBAに挑戦した。独学で色々して、悩んでもがいて、なんとかクラスモジュールを使えるくらいまでになった。
まずはすぐ聞かずに、マクロ記録とかぐらい試せ。
357デフォルトの名無しさん:2008/04/21(月) 20:01:01
>>356
クラスモジュールを使うとどんなことが実現できるの?
358デフォルトの名無しさん:2008/04/21(月) 20:35:56
>>356-357
まさにそこで今ハマってます。

Excel2007みたいな感じで、ステータスバーに「合計」と「データの個数」が
常に両方とも表示されていたら便利だなぁ、と思ってこんなマクロを書いてみました。
------------------------------------------------------------------------
Sub Worksheet_SelectionChange(ByVal Target As Range)

  'ステータスバーに「合計」と「データの個数」を二つとも表示

  Application.StatusBar = "  合計=" & WorksheetFunction.Subtotal(9, Target) & _
              "  データの個数=" & WorksheetFunction.Subtotal(3, Target)

End Sub
------------------------------------------------------------------------
これを、PERSONAL.XLSに書けば動くかなー、と思って気軽にやり始めたのですが、
甘くなかったです・・・。

いろいろググったり、詳しい人に聞いてみたりしたら、どうもクラスなるものを
使わないと解決しなさそうな感じなんで、今必死こいてクラスの勉強しとります。
359デフォルトの名無しさん:2008/04/21(月) 20:59:45
VBA使いはひどいなwwww
根本理解してないというか理解しようとしていないwwww
動けばいいやーっていうスタンスでやってきたからそうなる
360デフォルトの名無しさん:2008/04/21(月) 21:33:20
> 根本理解してないというか
やっぱそうかー。なんか「VBA使い」に恥をかかせたようでスマン…。
たぶん、俺がひどいだけだと思うんだ。
361デフォルトの名無しさん:2008/04/22(火) 04:05:16
準マスター文書として使えるのがVBA/OLE未使用文書
準々マスター文書として使えるのがVBA/OLE多用文書
半端に使ってるものは信頼性が一番低く、生ゴミ文書
扱いになる。
362デフォルトの名無しさん:2008/04/22(火) 10:01:48
ステータスバーを使わずに
メッセージボックスやユーザホームで

"処理中です・・・・ " & Count & "行"

と表示させながら裏で実行させる方法ってありますか?

例えばMsgBoxとかで表示させると、そこで止まってしまうんですが・・・
363デフォルトの名無しさん:2008/04/22(火) 12:51:57
>>361
ExcelアプリとExcelデータは区別したほうがいいってことね。
364デフォルトの名無しさん:2008/04/22(火) 13:39:50
>>362
msagent
365デフォルトの名無しさん:2008/04/22(火) 14:07:46
ユーザフォーム
366デフォルトの名無しさん:2008/04/22(火) 14:44:10
>364
ありがとうございます、やはりこの手の処理方法は
VBAのみで実現するわけじゃないんですね

ちょっと面白そうなので、VBS使ってその方向で検討してみようと思います
367デフォルトの名無しさん:2008/04/22(火) 14:46:54
VBSでやれることはVBAでもやれるぞ。
参照設定にあるはずだ。
368デフォルトの名無しさん:2008/04/22(火) 15:51:55
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()関数を使用してエラー発生の有無で判定してるのですが
他に良い方法ないでしょうか。。

370デフォルトの名無しさん:2008/04/22(火) 18:07:20
>>369

エラーを意図的に起こして別の情報を得るコードは
Acess−VBAなど、DBという会社システムでは泣く子も黙る世界と因縁の深い汎用機大型機の
コードでは常套手段。
やはり一般的にはしないほうがいい。
特にAccessなどDBが絡むシステムでは、VBA使うだけでも領域侵犯とみなされやすい
ので注意。
371デフォルトの名無しさん:2008/04/22(火) 19:37:09
>>362
初心者の俺が解答するから間違ってたらごめんよ。
例えば、50件のデータを処理する場合はカウンタ変数を作っておいて、1件の処理終わる度にそれに1ずつ足していけばいいと思うよ。そして、「処理件数/全件数」をユーザーフォームに貼りつけたラベルに表示するのを繰り返す。
マスターの皆さん見当違いだったらご指摘をお願いします。
372デフォルトの名無しさん:2008/04/22(火) 19:43:05
>>371
忘れてた。
裏で処理するなら「Application.ScreenUpdating」を使って画面更新止めたり、EXCELを非表示にした方がスマートかな。
373デフォルトの名無しさん:2008/04/22(火) 19:58:37
VBAであんまり凝ったことをやろうとしない方がいいと思うがな
作り捨てアプリ作成言語として割り切って使った方が前向きかも
374デフォルトの名無しさん:2008/04/22(火) 22:25:26
昔は無茶ばかりしたなあ
375デフォルトの名無しさん:2008/04/22(火) 23:05:11
>>374
kwsk
376デフォルトの名無しさん:2008/04/23(水) 00:29:53
バカクライアントが作ったエクセル表
きままにセル結合したり、色に意味持たしたり、2行結合のセルと2行間に罫線が無いセルに
それぞれ意味があったり、その行数が20行位まで別条件だったり、もう気が狂いそうです。
これをコンバートする為にまず整形しなければならず、1万行近い定期案件なのです。
凝った事をやるつもりはさらさらないが仕事だから仕方ないのです
377デフォルトの名無しさん:2008/04/23(水) 01:19:56
>>369
SDKに配列の要素があるかどうかの判定をするAPIがあったはず
名前忘れたけど
378デフォルトの名無しさん:2008/04/23(水) 09:01:12
>>369
配列の次数やレンジを引き数に積んで貰わないの?
379デフォルトの名無しさん:2008/04/23(水) 09:12:15
エラーで判定がいやなら、無難にIFかCaseでいいんじゃないの?
380デフォルトの名無しさん:2008/04/23(水) 09:20:37
>>376
工数出せばいいだろうに。

・お前のウンコシート使って無理矢理自動化すると1人月
・俺様が作ったスマートな表を使って自動化すれば0.5人月

両案出して上司に決済させろ。
381デフォルトの名無しさん:2008/04/23(水) 15:14:59
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のはず
386デフォルトの名無しさん:2008/04/24(木) 13:20:00
>>384
この場合は、「""」は「""""」と記述すれば上手くいくと思うよ。
387デフォルトの名無しさん:2008/04/24(木) 14:39:11
>>386
おお、上手くいきました。ありがとうございます!
388デフォルトの名無しさん:2008/04/24(木) 21:24:09
OS:XP Excel2003
共有フォルダにあるファイルを開きたいのですが、
どのように書けば共有フォルダを指し示すのでしょうか?
例えばCドラにあるファイルなら「C:\ファイル名」
と書きますよね。
389デフォルトの名無しさん:2008/04/24(木) 21:33:03
\\共有名\hoge
390デフォルトの名無しさん:2008/04/24(木) 21:41:21
ブー
詳しくはWindows板で聞く事
スレ違いというか板違い。
板違いの質問への回答はご遠慮下さい。
391デフォルトの名無しさん:2008/04/24(木) 21:43:26

了簡が狭いとはこの事を言うんだね。
392389:2008/04/24(木) 21:47:13
板違いでしたか失礼しました。
393デフォルトの名無しさん:2008/04/24(木) 21:58:49
エクセルの質問じゃないのか?
知らんけど
394デフォルトの名無しさん:2008/04/24(木) 23:49:51
>>390
>>388はEXCELでVBAを使用して開く場合はどうしたらいいのか聞きたいんだと思う。
395388:2008/04/25(金) 01:05:42
>>394 その通りです。
VBAで共有フォルダのファイルを開くコードを
書こうと思ったのですが、どう書けばいいのか
わからず困っていました。
適当にググったのですが答えは見つかりませんでした。
396デフォルトの名無しさん:2008/04/25(金) 01:14:29
>>388
で答えはわかったの?
共有フォルダー
コンピュータ名=EXCELの
共有ディレクトリVBAの
サブフォルダーXLSの
ブックtest.xlsを開くコードは?
397デフォルトの名無しさん:2008/04/25(金) 12:44:00
工数の累計を求めたいのですが、同じ計算式でも
EXCELのセル上で計算したものと、VBA上で計算したものと
では結果が微妙に違います。
何故でしょうか?
398346:2008/04/25(金) 13:48:29
セルの書式設定のパターンで網掛けをやると文字の上に網かけるじゃないですか
VBAの力を駆使して文字の下に網かけれるようにできないですか?
399デフォルトの名無しさん:2008/04/26(土) 01:07:28
VBAなどでのExcelの操作は、
あくまで人間が操作してできることしかできないよ、それ以上でもそれ以下でもない。
400デフォルトの名無しさん:2008/04/26(土) 01:54:20
またアホが湧いた
401デフォルトの名無しさん:2008/04/26(土) 14:29:11
入門用の書籍で
やさしくわかるExcel関数・マクロ 改訂版
を買おうと思うんだけどどう?
402デフォルトの名無しさん:2008/04/27(日) 10:03:45
ポケモンキャラクター図鑑とかウルトラマン
怪獣図鑑みたいなものだと思って買う
コンビニで売ってるくらいのもので、実にコンビニエンス!
な本。ただし内容は覚えないほうがいいよ。
403デフォルトの名無しさん:2008/04/27(日) 10:35:50
>>402
じゃあおすすめ教えて下せえ
皆さんはどうやって覚えたの?_実習あるのみ?
404デフォルトの名無しさん:2008/04/27(日) 13:25:29
>>403
俺はインプレスのできる大事典で覚えた。
405デフォルトの名無しさん:2008/04/27(日) 14:22:00
>>404
おまえは俺か

俺もそれで覚えた。カラフルで見やすくおすすめ。取り組みやすい。
406デフォルトの名無しさん:2008/04/27(日) 15:24:05
>>402

ドラえもんのポケットの中の道具辞典だろ? マクロや関数は。
ドラえもんの道具辞典みたいなもんだよ。エクセル便利マクロ集ってのは。
(ちょっと使いすぎたり適用範囲間違えるとのび太みたいに災難に合う)
VBAがウルトラマンに出てくる怪獣みたいなもの。
407デフォルトの名無しさん:2008/04/27(日) 17:32:05
最近のだと
しっかり学ぶ! Excel VBA 短期集中講座 [VBAマクロ基礎] 編
がいーよ。
408デフォルトの名無しさん:2008/04/28(月) 11:34:36
VBAforEXCEL 2003 sp1に関してなのですが、F8で一行ずつ実行しているときに、
Application.ScreenupdatingをFALSEにすると、なぜか(?)一行ごとに
画面の更新が行われ、非常にもたつきます。

これは、2003のみの仕様なのでしょうか。
あるいはサービスパック適用で改善されたりしますか。

よろしくお願いいたします。
409デフォルトの名無しさん:2008/04/28(月) 12:36:50
2003SP3 Application.Screenupdating = FalseでもF8で実行すると画面は更新されています
ただし、非常にもたつくという症状はありませんでした

いずれにしてもSP3は適用しておいた方がいいと思いますよ
410408: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)の箇所にタブを入れたいと思います。
もしくは、正規表現を用いずに出力する方法はあるのでしょうか。
413デフォルトの名無しさん:2008/04/28(月) 13:35:33
>>412
vbTab
414デフォルトの名無しさん:2008/04/28(月) 13:40:28
415デフォルトの名無しさん:2008/04/28(月) 14:19:08
>>411
配列のソートが出来ないのは不便。
シートに数字を広げて、昇順かけるしかないでしょ
416デフォルトの名無しさん:2008/04/28(月) 14:26:05
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


以前、会社のシートにこれがあった。
バグが出る度に書き直していった苦労の跡がにじんでた。
なんだかんだいって、結構偉大なコードだと思った。
417412:2008/04/28(月) 14:26:47
>>413
ありがとうございます。
解決しました。
418デフォルトの名無しさん:2008/04/28(月) 15:15:49
>>415 サンクス。早速やってみる。
419デフォルトの名無しさん:2008/04/28(月) 19:25:51
>>416
笑えるなあ。
420デフォルトの名無しさん:2008/04/28(月) 19:32:36
>>416
A(1)=A(2)
A(2)=A(1)

この時点で両方A(2)
421デフォルトの名無しさん:2008/04/28(月) 21:39:55
俺はソートにはADO使っちゃうな
422デフォルトの名無しさん:2008/04/28(月) 23:03:39
423デフォルトの名無しさん:2008/04/29(火) 02:16:06
>>411
配列のソートならググればサンプルがゴロゴロ転がってると思うが。
>>422
えれー遅いな。
つかえねー。
424デフォルトの名無しさん:2008/04/29(火) 09:58:17
>>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
425デフォルトの名無しさん:2008/04/29(火) 14:52:25
ソート関数ぐらい自前でちゃっちゃと用意できないあたりが
やっぱVBAスレって感じでいいね(ゲラプwww
426デフォルトの名無しさん:2008/04/29(火) 15:04:17
大きく出たな
427デフォルトの名無しさん:2008/04/29(火) 15:17:03
>>425
こんな口ばっかりのヤツに限っていまだにVB6あたり使ってそうw
428デフォルトの名無しさん:2008/04/29(火) 15:25:14
VB6は軽くていいぞ
業務アプリのGUIはアレで十分なんだがな
429デフォルトの名無しさん:2008/04/29(火) 16:28:29
エクセル使っていながらソートを自作するはめになったのは何故か。
自問するべきだ。どこで間違えた?
430デフォルトの名無しさん:2008/04/29(火) 18:40:42
逆だ。配列の使いにくさはVBAが最強。
故に車輪の再発明ばっかやるハメになる
431デフォルトの名無しさん:2008/04/29(火) 23:33:15
VBAでもStringBuilder使えるのね…
432デフォルトの名無しさん:2008/04/30(水) 09:35:33
エクセルVBAスレの割りに、配列をシートにペーストして
昇順後→再格納の手法が忘れられてないかい
433デフォルトの名無しさん:2008/04/30(水) 09:52:52
>>432
オートフィルターのこと?
434デフォルトの名無しさん:2008/04/30(水) 10:06:36
>>433
orz
435デフォルトの名無しさん:2008/04/30(水) 10:12:30
>>432
質問者はそれを求めてるように思える
そもそも配列でもなく、再格納の必要もなさそうな気がする


>>424
これは便利
勉強になりました
436デフォルトの名無しさん:2008/04/30(水) 10:13:09
>>433
A
 ↓
Z

このボタンを押すマクロ記録を何度やったことか。
しかも、ラベル行がないと、滅茶苦茶になるし。
437デフォルトの名無しさん:2008/04/30(水) 10:35:45
>>436
それは使い方が悪い。
438デフォルトの名無しさん:2008/04/30(水) 11:06:26
>>424
参照設定したらDataList.とピリオド打てばインテリセンスが効きそうなもんだが、効かないね。
SortやReverseやToArrayの他にどういうメソッドやプロパティがあるかおせーて。
オブジェクトブラウザでも出てこねー。
439デフォルトの名無しさん:2008/04/30(水) 11:21:39
必要な箇所だけCSVに転記(このマクロはVBAで自分で書いてすぐに捨てる)
外部プログラムでソートした別のCSV作って読み込む。これを元の場所に再格納
(このマクロもVBAで作ってすぐ捨てる)

外部プログラムは当然VB. VBS on WSHという手段もあるが、これは手軽だがそれほど
早くはない。
.NET FrameWork(MS無償提供)入れたWindowsならVBコンパイラ付いてるぞ。
インテリセンスとかそういう高機能なIDEじゃないとプログラム開発出来ないという
のであればVB 2008なりなんなりGetしてInstall)
CSV読み込んで配列に格納して、それをソートする処理はまぁちょっと勉強しなきゃ
辛いだろうな

兎に角Excelシートに見苦しい、一度しか使わないようなVBAコードは残さないこと
が精神衛生上好ましい。
440デフォルトの名無しさん:2008/04/30(水) 11:39:39
>>439
シートから不要不急のVBAコードは削除することは同意
誤動作された場合の被害が大きい。
ただそういった使用済みのコードは完全に捨ててしまうのも
やはり問題。別の理由で、データ破損してしまい作り直さな
ければならない場合とか、大騒ぎになるな。
テキストファイルに落としてオブジェクトとして
埋め込んでおくのがいいと思う。
441デフォルトの名無しさん:2008/04/30(水) 12:22:20
>>439
何番へのレスなの?
442デフォルトの名無しさん:2008/04/30(水) 13:31:27
>>439
それコード書く意味あんの?
443デフォルトの名無しさん:2008/04/30(水) 14:13:23
>>442
ちょっと複雑な比較順序でソートしなければならない場合とかだと
(ex 国語の点数が同じなら、数学と理科の重み4:3の平均で比較し、
それも同じなら、歴史と社会の重み2:3の平均で比較し )
やっぱりVBAコードに頼らざるを得ないよ。
手動操作で出来る場合も多いけど、ミスを疑われるから検証作業が要求されるので
結局、コードが残って再現もできるようにしといた場合のほうがずっと信頼される。
自分のだったら兎も角、共有シートとかだと、勝手にシートや列を行を増やしたり、
隠したりすることも出来ない場合が殆どだし、何かまとまった操作をする場合は
やっぱりVBAを使うよ。
でもVBAを使ってちょっと荒くデータ操作とかすると古いバージョンのExcelだと落ちるは、
シートが何故か肥大かするわで、嫌う場所も多いね。
だから外部ファイルにデータだけ抜き出して、処理してから書き戻すってことを
要請されることが多い。
シートのデータは、手作業だと抜き出しにくいように工夫されてるから、外部ファイルに
書き出す作業もVBAを使う。
444デフォルトの名無しさん:2008/04/30(水) 14:14:19
>>441
俺もわからんかった・・
445デフォルトの名無しさん:2008/04/30(水) 14:19:40
つまり、元々のシートの設計が悪いとVBAに頼った糞運用せざるを得なくなるってことですね。
446デフォルトの名無しさん:2008/04/30(水) 14:27:04
そうExcelの設計が悪すぎなのかもな
447デフォルトの名無しさん:2008/04/30(水) 14:40:00
csvの仕様も死ねる
448デフォルトの名無しさん:2008/04/30(水) 17:27:18
>>443
> 結局、コードが残って再現もできるようにしといた場合のほうがずっと信頼される。
コードはすぐ捨てるんじゃなかったの? >>439とは別人?
449デフォルトの名無しさん:2008/04/30(水) 17:33:10
450デフォルトの名無しさん:2008/04/30(水) 18:42:04
最新バージョンはどうかしらないけど(できるの?)
Excelは手動操作ログ記録とそのロールバックは保存できないからな。
使ったVBAをプリントアウトしてシートから削除して提出
したらVBAが作業ログと差分を兼ねることにもなる。
(自分と先方の作業前シートのバックアップ保持は当然)
451デフォルトの名無しさん:2008/04/30(水) 18:57:56
一般ユーザレベルのノウハウは、ソフトウェア板ででもやってちょ
452デフォルトの名無しさん:2008/04/30(水) 19:23:19
Excel&VBAくらい「一般人」向けの組み合わせはないと思うけどな
453デフォルトの名無しさん:2008/04/30(水) 20:21:46
ぷ、ぷりんとあうとしてさくじょ・・・
454デフォルトの名無しさん:2008/04/30(水) 20:39:40
>>443
その例題はVBAいらない。
VBAでやりたいなら止めはしないが。
455デフォルトの名無しさん:2008/04/30(水) 21:09:38
>>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
でお願いします。
456デフォルトの名無しさん:2008/04/30(水) 21:11:41
スルーよろ
457438:2008/04/30(水) 21:12:31
>>449
トンクス
458455:2008/04/30(水) 21:20:25
追加条件
デュアルモニターで、立ち上がってるプロセスやクリップボードまで
監視されており、セルを別のブックに貼付けてなんて姑息な技は
使えないということは言う迄もありません。Lotus-123,OpenOfficeを使うこと
等も無理でしょう。
さて、この状況でどうやってソートするのか期待してます。
459デフォルトの名無しさん:2008/04/30(水) 21:21:00
>>455
君はなぜExcel使ってるの?
460デフォルトの名無しさん:2008/04/30(水) 21:25:59
>>458
別のブックに貼り付けてソートしてから元のシートに貼りなおすのはありだなあ。
姑息とは思わない。
なんでそれをやらないことにこだわってるの?
461デフォルトの名無しさん:2008/04/30(水) 21:30:45
シート追加して、元シートのA1でshift+*して、コピペして、適当な計算式追加してソートして元に戻して、シート削除。
462デフォルトの名無しさん:2008/04/30(水) 21:31:47
s/shift+*/ctrl+*/
463デフォルトの名無しさん:2008/04/30(水) 21:34:14
>>455
それ、他Bookか追加シートで処理するより、CSVに吐き出して外部ソートするコード書く方が大変だろw
いちいち>>439みたいなことしてんの?馬鹿じゃね?
464デフォルトの名無しさん:2008/04/30(水) 21:35:20
>>455にとってExcelは不便な道具なんだね。
デュアルモニターで監視されててソート機能すら使ってはいけない。
かわいそう。
465455:2008/04/30(水) 21:39:55
クリップボードにコピーしたらその内容を直ちに削除する常駐ソフト(サービス)が
立ち上がっているような職場です!
好きでやっているわきゃないでしょ
466デフォルトの名無しさん:2008/04/30(水) 21:42:24
死ねよpgr
467デフォルトの名無しさん:2008/04/30(水) 21:42:36
>>465
じゃあセルの内容を別シートにコピペするVBA作ったら?
素人が変なソート組むよりそのほうがよっぽどいいよ。
468デフォルトの名無しさん:2008/04/30(水) 21:48:01
これからも後出しの条件がどんどん出るよ
お楽しみに!
469デフォルトの名無しさん:2008/04/30(水) 21:49:05
これはひどい(この板で今日二回目)
470455:2008/04/30(水) 21:50:00
ま、ガンバって下さい。期待してます。
471デフォルトの名無しさん:2008/04/30(水) 21:50:09
>>455
order byとかASCとか生意気なやつだ。
イラっとする。
472デフォルトの名無しさん:2008/04/30(水) 21:50:58
うぁぁぁぁぁ
473デフォルトの名無しさん:2008/04/30(水) 21:52:08
ちょっと待て、「歴史」と「社会」でわかれてるが、「社会」ってなんだよ?w
474455:2008/04/30(水) 21:56:00
ちんちん
475デフォルトの名無しさん:2008/04/30(水) 21:56:35
でもVBAでCSV書き出すのは可って意味わかんない
馬鹿じゃないの
476デフォルトの名無しさん:2008/04/30(水) 21:58:29
どっかの学校か塾の先生かなんか?
レベル低すぎーw
477デフォルトの名無しさん:2008/04/30(水) 22:00:26
>>443が何がバカかというと,複雑な条件のソートには独自のアルゴリズムが
必要とか思ってるところ。
478デフォルトの名無しさん:2008/04/30(水) 22:01:04
なんか可哀想だな


生徒が
479デフォルトの名無しさん:2008/04/30(水) 22:12:43
何の先生だろ。
数学じゃないことを願う。
480デフォルトの名無しさん:2008/04/30(水) 22:47:11
プログラミングだろ

んでなんでそこまで先生がむきになってるのか、更におまいらが叩いてるのかがわからんよ
おまいらの脳内モジュールにスルー判定のアルゴリズム追記しとけ

んで、ソートコード出来た?
481デフォルトの名無しさん:2008/04/30(水) 23:10:16
必死すぎる先生のキャラがおもしろいからだよ。
VBA使ってることをなんとか正当化したいんだね。
VBAでソートを組むはめになるやつには何か大切なものが欠如している。
482デフォルトの名無しさん:2008/04/30(水) 23:22:10
結局話の流れは、>>455のお題を手作業でやる方法を示せってことなの?
483デフォルトの名無しさん:2008/04/30(水) 23:33:59
スレ違い
484デフォルトの名無しさん:2008/04/30(水) 23:38:10
いや板違い
485デフォルトの名無しさん:2008/04/30(水) 23:54:33
そんなに触っちゃダメなデータならソートして並べ替えちゃうのもダメなんじゃないかな。
486デフォルトの名無しさん:2008/05/01(木) 00:15:11
>>424
ArrayListのToArrayでキャストするにはどうですればいいのでしょうか??
487デフォルトの名無しさん:2008/05/01(木) 00:54:07
流れが意味不明だ
488デフォルトの名無しさん:2008/05/01(木) 01:11:30
>455
ファイルをデュプってODBCのExcelドライバをADO経由して開いて、
あとはそのままクエリ書けばいいじゃん。
489デフォルトの名無しさん:2008/05/01(木) 01:16:15
飽きた
490455:2008/05/01(木) 01:16:53
>>488
大変よくできましたね。通信簿は5をあげましょう。
しかし内申書では「粗暴/凶悪。将来犯罪者になる可能性あり」を書いときます。
491455 ◆CSZ6G0yP9Q :2008/05/01(木) 01:23:05
これが最後のレスです。
>>474は455ではありません。
以降の455のレスは別人になります。
492デフォルトの名無しさん:2008/05/01(木) 01:29:53
455がんがれよ
じゃーの
493デフォルトの名無しさん:2008/05/01(木) 01:35:17
一般人にも分かるようなExcelだけで完結する操作を期待していた俺には
488はちょっと期待外れだった。お題は確かに満たしているけど……。
494デフォルトの名無しさん:2008/05/01(木) 01:42:51
>>490
頭おかしいのか?
VBAなし&クリップボード使用なしでどうやるかっつー話だろ?
あ、そーか、10段階の5か。
495デフォルトの名無しさん:2008/05/01(木) 01:58:58
逃亡宣言した頭おかしい奴のお題とかどうでもいいよ
496デフォルトの名無しさん:2008/05/01(木) 08:24:05
>>455のお題を翻訳すると「Excelを使わずに成績表を並べ替えなさい。」ということだろう。
497デフォルトの名無しさん:2008/05/01(木) 09:12:01
秋葉原のソフマップに5万円落ちてますとか言い出しそうだ
498デフォルトの名無しさん:2008/05/01(木) 15:24:15
ちょっと見ない間に随分賑わってたんだな
499デフォルトの名無しさん:2008/05/01(木) 16:28:20
ソート問題は暑いな
500デフォルトの名無しさん:2008/05/01(木) 17:10:35
500ゲト
501デフォルトの名無しさん:2008/05/01(木) 17:47:17
なかなかに香ばしいな

最大値を抜き出して、最小値から1づつ増加、判定合致したものから格納じゃだめなの?
場合に依っては死ぬほど重いけど
502デフォルトの名無しさん:2008/05/01(木) 17:51:34
>>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
>>505
クリスピーな奴へっけん
507デフォルトの名無しさん:2008/05/01(木) 18:08:26
みなさん食いつきが良いですね
508デフォルトの名無しさん:2008/05/01(木) 19:13:28
クイックソートが一番最適で、そんなこともわからないから
自前でちゃっちゃと用意することもできずに、こんな不毛なやり取りしてるあたりが
やっぱVBAスレって感じでいいね(プゲラオプスwwwwwww
509デフォルトの名無しさん:2008/05/01(木) 19:13:59
クイックソートが最適・・・(笑
510デフォルトの名無しさん:2008/05/01(木) 19:26:03
クイックソートを笑って逆に自分の無知ぶりを晒けだしてることにすら気づいてないあたりが
やっぱVBAスレって感じでいいね(ゴルバチョフwwwwwwwwww
511デフォルトの名無しさん:2008/05/01(木) 19:27:14
C の qsort とか純粋なクイックソートでまず実装されてないだろwww
512デフォルトの名無しさん:2008/05/01(木) 19:33:58
そもそもなんでエクセルでソート書いてんだよ。
それはさておき、ソートプログラムを売る人じゃないんならクイックソート
を実装できる程度でもじゅうぶんだと思う。
>>501のはさすがにひどい。
513デフォルトの名無しさん:2008/05/01(木) 19:48:01
プゲラとか懐かすぃ
514デフォルトの名無しさん:2008/05/01(木) 20:09:52
510 は逃げ帰ったようだな
515デフォルトの名無しさん:2008/05/01(木) 20:12:31
クイックソートはスレ違い
516デフォルトの名無しさん:2008/05/01(木) 20:40:17
すみません初心者ですがマクロの記録をやってるんですが、おもしろいですね
517デフォルトの名無しさん:2008/05/01(木) 20:55:54
>>516
VBAの正しい楽しみ方だね。
ここの先輩たちのようなソート作るようなバカにはならないでね。
518デフォルトの名無しさん:2008/05/01(木) 21:37:32
dim a as integer で、空白セルの値が代入されたとき
if a="" then では型不一致となるのをどう書いたらいいですか?

519デフォルトの名無しさん:2008/05/01(木) 21:39:30
バルブソートが一番だよ。
520デフォルトの名無しさん:2008/05/01(木) 21:48:16
Excelの並べ替えの機能を使ってあげろよ。
521デフォルトの名無しさん:2008/05/01(木) 22:30:49
>>516
それがVBAの自慢できるところだと思う
初心者に優しい
522デフォルトの名無しさん:2008/05/01(木) 22:42:36
>>518
dim a as variant
523デフォルトの名無しさん:2008/05/01(木) 23:09:36
>>518
あとは格納の段階で型不一致を監視して弾く

くりすぴーな501ですがクイックソートってなんですかわかりません〉〈
直訳するとはやぶさの剣かなにかで

先生教えて〉〈
524デフォルトの名無しさん:2008/05/01(木) 23:12:09
並び替えアルゴリズムの一名称
ネットにvisual basicのコードいっぱいあるよ
525デフォルトの名無しさん:2008/05/01(木) 23:17:40
>>523
教養としてクイックソートくらいは知っておいたほうがいい。
勉強のためにVBAで組んでみるのもいいかもしれない。
でも仕事では使うなよ。VBAでソートなんてアホのやること。
526デフォルトの名無しさん:2008/05/01(木) 23:21:44
>>525
VBAじゃなくても、自分でソートのコード書くことなんてほとんどないだろ
527デフォルトの名無しさん:2008/05/01(木) 23:26:18
>>526
VBA使いはソートばかり書きたがるだろ?
528デフォルトの名無しさん:2008/05/01(木) 23:28:47
まあソートプログラムなどネットで買い物するぐらい簡単なんだけど
おじいちゃんとかは発狂するかもねw
529デフォルトの名無しさん:2008/05/01(木) 23:34:22
>>528
簡単なんだから作っても誰もほめてくれないぞ。
530デフォルトの名無しさん:2008/05/01(木) 23:40:04
だからネットで落とせると言ってるだろおじいちゃんw
531デフォルトの名無しさん:2008/05/01(木) 23:44:39
>>530
そうか?伝わらなかったな。
「ネットで買い物する行為と同じくらい簡単な事だ」と言ってるのかと思ったよ。
532デフォルトの名無しさん:2008/05/01(木) 23:48:24
>>531
発狂するなよ
おじいちゃんには難しいかもしれんがw
533デフォルトの名無しさん:2008/05/01(木) 23:50:12
>>532
そうか。そうか。
おすすめのソートはどれだね。
534デフォルトの名無しさん:2008/05/01(木) 23:52:22
>>533
毎度馬鹿の一つ覚えの純粋クイックソートです。
要素数少なくても馬鹿の一つ覚えのようにクイックソートします。
要素数によって分岐するなんて発想はありません。
535デフォルトの名無しさん:2008/05/01(木) 23:52:42
おすすめのソートってネットで特徴ひけるだろw
そんなんで勝ち誇りたいなんて能無しで誰にも相手にされない
頑固じじいといっしょだねww
536デフォルトの名無しさん:2008/05/01(木) 23:54:40
プログラマーに劣等感抱いてるのがいるな
537デフォルトの名無しさん:2008/05/01(木) 23:55:42
おや?ソートをダウンロードする話じゃなかったのか?
538デフォルトの名無しさん:2008/05/01(木) 23:56:06
職場で嫌な事でもあったんだろ
539デフォルトの名無しさん:2008/05/01(木) 23:58:20
>>527
????
540デフォルトの名無しさん:2008/05/01(木) 23:59:38
ソートをダウンロード((≧m≦)ぷっ!
身近の目上の人が
「並び替えをダウンロードしろ」
とか言ったらもう馬鹿にされまくりで
誰も相手にしない
541デフォルトの名無しさん:2008/05/02(金) 00:00:11
なんだ、このスレ
542デフォルトの名無しさん:2008/05/02(金) 00:01:11
所詮VBAスレだしキチガイが湧いても仕方が無い
543デフォルトの名無しさん:2008/05/02(金) 00:02:16
最近の若い子とは話が通じないな。
まあいい。どんなアルゴリズムでもいいんだ。アルゴリズムの話をしたいんじゃない。
エクセルでソート自作してなんの意味あるんだということを言いたい。
544デフォルトの名無しさん:2008/05/02(金) 00:05:58
何を当たり前の事を自信たっぷりに言ってるんだ。
分かって遊ばれてるだけだというのに。
545デフォルトの名無しさん:2008/05/02(金) 00:07:55
難しい連中だな。
546デフォルトの名無しさん:2008/05/02(金) 00:10:54
>>544
当たり前と言うがこのスレ見てると本気で心配なやつがちらほら…
547デフォルトの名無しさん:2008/05/02(金) 00:13:13
>>418  を見る限り、既に、本流は解決している件
548デフォルトの名無しさん:2008/05/02(金) 00:17:52
>>547
その後>>443とか>>501が登場したからなあ。
549デフォルトの名無しさん:2008/05/02(金) 02:42:25
会社とかで使うブックの場合やはり余り凝らないほうがいいと思う。
ちょっと格好わるくてもVBAでやったほうが無難かも。
情報セキュリティにうるさいDB屋の圧力があるからね。
あんまり凝ったことして得意になってると、Excelブックを一種の
アーカイブファイルとして扱い主要処理はDBでやれという動きが加速してくる。
殆どのブックは実際物置としての価値しかないんだが、一部有効に使われた
ブックには、核廃棄物のように再利用不能な割に流出すると有害なもの
が含まれてる場合がある。やっかいなことにちょっと凝ったスマートな使い方
をすると何でもないデータからそういうのが生まれることがある。
虫が湧くって感じ。
だから最近は>>443の例のように、凝った使い方を一切禁止するブックを
物置として扱うことが強制され、かつてはExcelで簡単に出来た処理もわざわざ
固く重く扱いにくいRDBの上でやれと強制される最近の傾向はそれが原因
してる。(単にDB屋の陰謀だという説もあるが)
550デフォルトの名無しさん:2008/05/02(金) 02:46:40
ではちょっと凝った使い方をしたのを、「ムック」と呼ぶ事にしよう。
551デフォルトの名無しさん:2008/05/02(金) 03:05:39
ExcelVBAでお手軽に出来ることをRDBに持っていくと、やたらと工数が掛かる。
外部に出すと、鼻クソみたいなデータ処理でも平気で3人月とか見積もり出てくるし。
それに、RDB使うなら業務の標準化から始めないと不毛になりがち。
ま、何ごともほどほどに。
552デフォルトの名無しさん:2008/05/02(金) 07:00:35
>>549
凝らないほうがいいならなおさらVBAは使わないほうがいいじゃないか。
「セキュリティにうるさいからVBAが無難」←なぜ?
「流出すると有害なブックがある」←当たり前。

おまえ>>443だろ。
553デフォルトの名無しさん:2008/05/02(金) 07:02:18
>>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
>>557
実は出てないらしい
559デフォルトの名無しさん:2008/05/02(金) 13:29:32
でもぶっちゃけ、ちょっとVBA使えるようになるとちょっとしたモン作りたくなるよね?
そういう時に手を出しがちなのがソート関係じゃない?

ええ、その昔、俺も組みましたよ、クイックソート

懐かしい、結構みんな通る道なんじゃないの?(俺だけか)
560デフォルトの名無しさん:2008/05/02(金) 13:49:54
アメリカじゃ馬鹿なことやって、みんなに迷惑かけるやつに限って成功したりするもんな。
561デフォルトの名無しさん:2008/05/02(金) 14:23:15
そうそう、派手なフォーム作ったりな
562デフォルトの名無しさん:2008/05/02(金) 15:11:05
なんかやりたい気持ちはわかるんよ。

派遣で就いた職場で社員から、手作業でデータを加工する仕事をまかされて、あまりの能率の悪さと面倒くささで
しかもミスると怒られるからVBA使って一発で加工するマクロ作ったらなぜか気味悪がられるようになった。

それからというもの、プリンタが止まったり、PCに何かエラーがあると全部俺が疑われるようになった。
563デフォルトの名無しさん:2008/05/02(金) 15:31:07
>>549
Excelブックが物置?
やっぱり455の言う事は意味がわからんな
564デフォルトの名無しさん:2008/05/02(金) 16:07:09
>>562
そんな会社止めちまえ
565デフォルトの名無しさん:2008/05/02(金) 17:00:44
>>549
そんな会社止めちまえ
566デフォルトの名無しさん:2008/05/02(金) 17:05:34
>>562
俺もその経験あるな・・・
567デフォルトの名無しさん:2008/05/02(金) 17:06:34
>>564
いや、あまりにも周りが無知過ぎていつか自分にもチャンスがあるんじゃないかと思って辞めれない・・。
もう少しレベルの高いとこだと使い物にならない実力だし。

そんな態度だから苛められるんだろうなぁ。
568デフォルトの名無しさん:2008/05/02(金) 17:38:23
ニュータイプを恐れる者たちの気持ちがわかっただろう
569デフォルトの名無しさん:2008/05/02(金) 17:58:12
人をモルモットみたいに……
570デフォルトの名無しさん:2008/05/02(金) 18:23:09
ついにねんがんのアイスソートをてにいれたぞ
571デフォルトの名無しさん:2008/05/02(金) 18:26:31
どう考えても手作業の方が早いのに、
「マクロでやれ、VBAでやれ、そうしたらスグできるだろ?○○分後までに終わらせろ」
って、何も作業の中身を見ずに、マクロ・VBAを使えば
どんな作業でもスグに終わると信じ込んでいる上司に
困ったことはあったな。
572デフォルトの名無しさん:2008/05/02(金) 18:27:05
職場によるだろ。同じ派遣でも。
>>562の職場は、多分シートのミス入力チェックする担当者の仕事が無くなって
立場無くなるから顰蹙を買っただけだと思う。
一般的にはシートに妙な参照や糞数式とか条件付き書式とか使ったトリッキーな
シート作るほうが顰蹙を買い易い。
VBAのコード(特に日本語だと喜ばれる)置いておく(組込んだままには
しないでテキストに落として、ブックに埋め込む)ほうが喜ばれる。
573デフォルトの名無しさん:2008/05/02(金) 18:35:12
>>572
>VBAのコード(特に日本語だと喜ばれる)置いておく(組込んだままには
>しないでテキストに落として、ブックに埋め込む)ほうが喜ばれる。

なんとなくコードっぽい日本語。
574デフォルトの名無しさん:2008/05/02(金) 18:47:06
>>573
毎回コードをエディタにコピーしてから実行するの?
なんかめんどくさそうなんだけど。
どんな処理するVBAなん?
575デフォルトの名無しさん:2008/05/02(金) 19:19:13
アドインじゃだめなん??
576デフォルトの名無しさん:2008/05/02(金) 19:21:56
mscorlib.SortedListって便利だな。
577デフォルトの名無しさん:2008/05/02(金) 20:10:01
まぁ、パソコン販売の「ソーテック」の名前の由来が
「ソートテクニック」だからな。
578大邊創一:2008/05/02(金) 20:17:17
・・・
579デフォルトの名無しさん:2008/05/02(金) 22:12:33
またソートか

じゃあ反対に、考えうる限りギリギリ使えるレベルの、最悪のソートコードだれか考えれ
580デフォルトの名無しさん:2008/05/02(金) 22:56:01
ソートの話をするやつはそーっとしとこ。
581デフォルトの名無しさん:2008/05/02(金) 23:34:50
>579
ボゴソートでもVBAで実装する話?
582デフォルトの名無しさん:2008/05/03(土) 00:52:00
ソートはもういいから次
583デフォルトの名無しさん:2008/05/03(土) 01:44:48
ExcelやDBには本来ソートなんて概念はない。
以上基地外の発現でした。
584デフォルトの名無しさん:2008/05/03(土) 02:16:42
>>580
その通り。卑猥な話だからね。
585デフォルトの名無しさん:2008/05/03(土) 07:26:52
Excel2003しか持ってない(Accessを持ってない)俺が、
七万個の要素を昇順で並べ替えたい時にはどうすればいいですか?
586デフォルトの名無しさん:2008/05/03(土) 07:46:31
Accessを買う
587デフォルトの名無しさん:2008/05/03(土) 07:55:37
Excel2007を買う
588デフォルトの名無しさん:2008/05/03(土) 07:58:51
手作業でやる
589デフォルトの名無しさん:2008/05/03(土) 08:22:41
>>585
その七万個の要素はどんな状態にあるの?
csvなりのフォーマットに落ちているなら、sortすればいいだけだが。
590デフォルトの名無しさん:2008/05/03(土) 08:29:03
>>589
kwsk
591デフォルトの名無しさん:2008/05/03(土) 08:30:15
つ[man sort]
592デフォルトの名無しさん:2008/05/03(土) 08:33:48
ちょっと疑問に思ってsort /?してみたら、固定幅ならsort.exeでも特定カラムをキーにソートできそうね。
unix系のsortにしても、テキストに落ちている必要はあるけど。
593デフォルトの名無しさん:2008/05/03(土) 08:38:32
>>586>>587>>589
工エエェェ(´д`)ェェエエ工工

>>589
Sheet1とSheet2のA列〜F列×35000行と思って頂いて差し支えありません。
594デフォルトの名無しさん:2008/05/03(土) 08:50:14
>>593
1シートずつ別々のcsvファイルに落として、二つのcsvファイルをまとめてsortでOK。
cygwin使うなり、Linuxをリモートで使うなりできるなら、出力を二つのcsvファイルに分けるところまでできる。
そうでないなら、それこそVBAで分割して読み込むって処かな。
いずれにしても、自分でソートを書く必要はないわけで。

どうしてもVBAでやるなら、各シートをそれぞれソートしてからマージソートかね。
595デフォルトの名無しさん:2008/05/03(土) 09:31:01
テキストファイルの分割ごときでそんなご大層な
596デフォルトの名無しさん:2008/05/03(土) 10:53:09
70000の配列に値を入れて、ネットでソートプログラムを
探して、並べ替えればいいのでは
597デフォルトの名無しさん:2008/05/03(土) 12:07:29
>>594
サンクスコ
具体的にどういう手順でやればいいの?
聞いてばっかでゴメソ

>>596
ソートのコードがいるんだね
598デフォルトの名無しさん:2008/05/03(土) 12:11:22
599597:2008/05/03(土) 12:20:03
確かにスレ違いだね
助言してくれた皆さんありがとう
あとは自分で何とかしてみるよ
600デフォルトの名無しさん:2008/05/03(土) 12:30:22
>>562
せっかくVBAで仕事が早く終わるようになったのなら
仕事してるふりしてネットでも見てなさい
601デフォルトの名無しさん:2008/05/03(土) 13:07:55
ちょっと時間がかかっていいなら・・・
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の行あふれは起こらないというのがミソ。
602デフォルトの名無しさん:2008/05/03(土) 13:08:46
あ、3は「Sheet2の中で」というのが抜けてた。
603デフォルトの名無しさん:2008/05/03(土) 14:03:50
ArrayList使え。
604デフォルトの名無しさん:2008/05/03(土) 17:25:16
ご助言をいただきたいのですが、下記のようなマクロを作成しております。
1.幾つかボタンがあり、ボタンを押すとボタン名のシートが追加されます
 作成されたシートに任意の数字を入力しそのシート内でそれが合計されます
2.次に集計用のシートに1で集計した数を貼り付けます。
3.これを追加されたシート分繰り返す。
という処理をするマクロを作成中なのですが、
・追加されたシート分だけコピーするという条件(左から2番目のシートから処理をはじめ
シートの右から2番目まで繰り返すというのを考えています

・集計しコピーしたものを集計用シートの前回貼り付けたセルの横に貼りつけ
をどのうように組めばいいのか思いつきません…。

ボタンの数は全部で7つで最高増えるのが7シートなので、
最初から7つのシートを作成しその集計を集計用のシートに貼りつけするのは
できるのですが、そうすると使わないシートまで作成することとなるので出来ればそういう
ムダを省きたいと思い上記のような事を考えました。
なにか改善策やヒント等ございましたらご教示の程お願い致します。
605デフォルトの名無しさん:2008/05/03(土) 17:36:12
Dim i as integer

For i = 2 to Worksheets.Count -1

  Worksheets(i) に対して処理

Next

こんな感じでどうでしょう
606デフォルトの名無しさん:2008/05/03(土) 18:09:23
VBAとセル間リンクを駆使したExcellentなExcelの使い方をしたければ
LANカード抜いたPCでやったほうがいい。USBメモリで外部データとの
やりとりをする。
ネットやLANに繋がってる環境でVBAを使うとDLLアクセスとか
出来るんで、ネットにデータ流出してるとかしてないとかDB屋が騒ぎ
だす。今やネットやLANに繋がってるPCでExcelやAccessでVBA使う時
は管理者許可がデフォになってるね。
ソートで騒いでいるようだが、DBもExcelもソートは実は余り得意じゃない。
ソートしないで済むようにデータを入れていくのがキホン

607デフォルトの名無しさん:2008/05/03(土) 18:38:12
自分の職場環境がデフォだと思うなよ
608デフォルトの名無しさん:2008/05/03(土) 18:44:21
>>606
VBAかLANかと言われたらLANを選ぶ。
あとそれからエクセルとアクセスはソートが得意。これ豆知識な。
609デフォルトの名無しさん:2008/05/03(土) 18:53:42
本当に豆な知識だ
610デフォルトの名無しさん:2008/05/03(土) 19:23:11
>>606
たかが成績表の並べ替えに面倒なやつだな。
611デフォルトの名無しさん:2008/05/03(土) 20:34:47
>>606
>ソートで騒いでいるようだが、DBもExcelもソートは実は余り得意じゃない。
>ソートしないで済むようにデータを入れていくのがキホン

ちよ、ちょっと。そんな馬鹿な。DBやExcelはツールであって得意じゃないのは使う側の能力がかなり影響するでしょ?
ソートしなくいで澄むようにデータ入力って・・・そんな馬鹿な・・・
612デフォルトの名無しさん:2008/05/03(土) 20:44:20
>>611
>>606>>443だろう。
こいつは何かおかしい。病的だ。きっと優先順位の並べ替えが苦手なんだろうな。
613デフォルトの名無しさん:2008/05/03(土) 21:17:13
>>606
ソートしなくて済むようにするにはデータをどうやっていれるんでつか?
614デフォルトの名無しさん:2008/05/03(土) 21:23:33
入力前にあらかじめデータをソートしておけばいいだろ
615デフォルトの名無しさん:2008/05/03(土) 21:33:35
>>614
手作業でか?
616デフォルトの名無しさん:2008/05/03(土) 21:42:41
なんか香ばしいやつがいるなぁ
617デフォルトの名無しさん:2008/05/03(土) 21:58:41
>>606
お願いがあります、









頼むからコテつけて下さい
618デフォルトの名無しさん:2008/05/03(土) 22:11:36
ヒント:NGワード DB屋
619デフォルトの名無しさん:2008/05/03(土) 22:16:25
なんか微妙に、最近のExcel総合相談所と、雰囲気が
似てるな。あっちは、707だが
620デフォルトの名無しさん:2008/05/03(土) 22:41:14
Excel総合相談所で「ソートを自作するやつ」という笑い話を聞いたことがある。
あくまでもVBAでバカなことやろうとするやつへの戒めであって、本気でそんなことするやつはいないからこそ成立するギャグだった。
621デフォルトの名無しさん:2008/05/03(土) 22:45:59
>>620
モンティパイソンだろそれは
622デフォルトの名無しさん:2008/05/03(土) 23:14:31
>>604
本当にやりたいことはなんだろう。シートを出したり引っ込めたりすることなの?
623デフォルトの名無しさん:2008/05/03(土) 23:31:36
優先順位が簡単にわかる世界って



お子ちゃまの世界のこと?
624デフォルトの名無しさん:2008/05/03(土) 23:48:18
>>623
優先度が簡単にわかることとお子ちゃまとにどんな関係があるのやら。
やっぱり病気だな。
625デフォルトの名無しさん:2008/05/04(日) 00:47:13
>>623
お子ちゃまの世界や極端な大人の世界では、優先順位は
簡単にわからないぞ。
2つのものを比較できるかどうかすら怪しいからね。
2つのものが比較出来るのが自明というそんじょそこらの
大人の世界は、もしかすると非常に幼稚な世界かもしれないぜ
その幼稚園の主役がExcelやAccessだったりするから悲
しいものがあるが。
626デフォルトの名無しさん:2008/05/04(日) 10:12:24
愛こそが最優先
627604:2008/05/04(日) 13:22:19
>605
ありがとうございます!
データを会社においているので、試すのは明日しようと思いますがそれで上手く
いけそうな気がします!
セルのコピーについてはかなり強引ですが、
集計した1セルごと行数分(57行あるのですが・・・)コピーして貼り付け
だと次のシートの集計をしたとき貼り付けも隣の行(セル)に上手く貼りついてくれたので
とりあえず結果オーライです。
まだまだ覚え始めなのですが、このスレを見ながら少しずつ色んな考えを持てるようにしたいと思います。
ありがとうございます。
628デフォルトの名無しさん:2008/05/04(日) 13:26:44
複素数ですら大小比較できないってのに。
比較できるのが自明なものなんて限られてるわ。
629デフォルトの名無しさん:2008/05/04(日) 14:54:28
>>628
ベクトルは大小比較できないと思ってる?
630デフォルトの名無しさん:2008/05/04(日) 15:56:14
>>629
グローバルには標準化できないだけで、恣意的に決めればローカルには定義できるだろ?

大小関係の比較が難しいというのは、次のようなソート問題


大人n人子供m人のM個の家族がある。(当然家族ごとにn,mは異なる)
それぞれ別のM個のホテルに泊まるとする。
それらのホテルは、一般的に大人、子供の宿泊料金が別(常に半額というわけでもない)

シート1の各行にはホテル毎の料金表(大人・子供)
シート2の各行には家族の大人・子供人数があるとする。
シート1の1行に記載されてるホテルにシート2の1行の家族が泊まるとする。

シート2の行を並べ替えて、宿泊料金の総和が最も安くなるようにソートしろ

というような問題

これはエクセルだろうがDBだろうが難しい。ソートの専門家向けの問題。

「車輪の再発明」なんて、小馬鹿にした慣用表現は忘れろ
631デフォルトの名無しさん:2008/05/04(日) 17:12:51
恣意の意味が分かってない件
632デフォルトの名無しさん:2008/05/04(日) 17:18:45
普通それを「ソート」とは言わない件
633デフォルトの名無しさん:2008/05/04(日) 17:19:36
反恣意的に決めてほしいものですな
634デフォルトの名無しさん:2008/05/04(日) 17:36:34
>>630のソートって難しいの?
超簡単に見えるけど?
635デフォルトの名無しさん:2008/05/04(日) 17:44:43
636デフォルトの名無しさん:2008/05/04(日) 19:02:30
>>634
だよなあ。VBAなんぞまったく使わずに集計&ソート可能。
ソートの専門家向けの問題だって。おもしろすぎる。車輪の再発明の現場を目撃したよ。
637デフォルトの名無しさん:2008/05/04(日) 19:26:54
>>630
ベクトルをグローバルに標準化はできないけど、恣意的に決めればローカルには定義できる。

つまり大小比較できるの?できないの?もっと詳しく説明してほしいな。
638デフォルトの名無しさん:2008/05/04(日) 19:29:24
おまいらもう許してやれよ
639デフォルトの名無しさん:2008/05/04(日) 19:33:43
車輪の再発明と聞いて、すっとんできますた。
640デフォルトの名無しさん:2008/05/04(日) 20:46:50
負け惜しみも沸いてきたみたいんだな(ワクワク
641デフォルトの名無しさん:2008/05/04(日) 21:01:56
ローカル = 丹沢周辺
642デフォルトの名無しさん:2008/05/04(日) 22:12:30
>>628
複素数の並べ替えすらできないバカがVBAでどんなことやってんだよ。笑わせんな。
643デフォルトの名無しさん:2008/05/04(日) 22:44:25
思いっきり馬鹿にされそうだが>>630をVBAなしでやる方法が分からない・・・
集計はともかく、順列組み合わせをシートに吐き出す部分だけはVBA使わないと苦しくないか?
試しに6家族でやってみたが720通り(6の階乗)の組み合わせをVBAで実際に書かせないと
俺の腕では最小値が見つけられない_| ̄|〇
9家族以上になったら1シートにおさまらないし
VBAばっかり使っててExcelの基本機能に無知なせいかもしれんが
誰か答えプリーズ!
644デフォルトの名無しさん:2008/05/04(日) 22:55:32
総和がなんでソートで安くなるんだ
645デフォルトの名無しさん:2008/05/05(月) 00:00:06
>>643
VBAばかり使っていると壁にぶつかるよ。一度離れて基礎的な勉強をしてほしいな。
組み合わせ最適化問題は難問で昔からいろいろ研究されています。ソルバー機能について調べてみて。
646デフォルトの名無しさん:2008/05/05(月) 00:04:35
>>644
組み合わせ最適化問題は地獄の1丁目でつ.入門は慎重に.
647デフォルトの名無しさん:2008/05/05(月) 00:19:05
( ´_ゝ`) ふーん・・・そうかい
648デフォルトの名無しさん:2008/05/05(月) 00:58:07
>>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円

泊まらせ方によって結構差が出るだろ?

649デフォルトの名無しさん:2008/05/05(月) 01:02:25
あー・・・
という事は、それぞれの家族がどのホテルに泊まれば
一番安いかってことかね。
650デフォルトの名無しさん:2008/05/05(月) 01:20:27
ソルバーかなーとおもったけど、親子の数がセットで移動させないと
いけない、という制約をどう実装すればいいのか思いつかない
651デフォルトの名無しさん:2008/05/05(月) 01:35:24
答えは複数ある可能性あり。Mが大きいと、答えが異常に多かったりする。念のため。



652デフォルトの名無しさん:2008/05/05(月) 02:17:12
てか、勝手に家族離散させるな
653デフォルトの名無しさん:2008/05/05(月) 13:29:12
組み合わせ最適化はおもしろい問題だけど、Excel使ってる人が現実に解かなければならない場面はほとんどないだろう。
ホテル選びの例題だって実際にはあり得ない人工的な状況設定だし。
654デフォルトの名無しさん:2008/05/05(月) 13:37:51
そしていざ解かなければならないとしても規模が小さければソルバーで解けてしまう。
それじゃソルバーで解けない場合はどうするのか?
VBAで組むのだろうか?
>>630はどうするつもり?
655デフォルトの名無しさん:2008/05/05(月) 15:05:10
>>652
ふいた
656デフォルトの名無しさん:2008/05/05(月) 15:59:27
>>653
>Excel使ってる人が現実に解かなければならない場面はほとんどないだろう。
その考え方は殆どExcelをExcelとして使っていないから出てくる考え方だな
まぁいい。本来Excelなどをまともに使いこなせるのは200年以上の人生経験(☆比喩)
が必要な世界だからな。
Excelは RDBというリアルタイム志向でアブソリュートな情報の作成ツール
を補佐するツールとして使えばいい。
>>630の問題で言えば、
最小コストと最大コストの推測、コストの分布の概略を掴む。(これを完全にやるのは
まぁ無理だろう)
これにより価格体系や家族構成に問題があるかないかを推測し、交渉する材料とかに
するわけだ。
価格体系や家族構成の分布が悪いと、家族間や家族対ホテルで殺し合いが発生して
双方共に絶滅する可能性すらあるからな。
双方を双方の価値観を厳格に固執する態度じゃリアルタイムには問題は解決しないという
前提に立つのが賢い。
657デフォルトの名無しさん:2008/05/05(月) 16:21:20
>>656
例えば客の家族構成に問題がある場合はどのような解決手段がある?
658デフォルトの名無しさん:2008/05/05(月) 16:34:31
>>656
君が組み合わせ最適化問題に興味を持っているのはわかった。
そして今の今までそれを専門家向けのソートと呼んでいたこともわかった。
659デフォルトの名無しさん:2008/05/05(月) 16:37:43
パソコンなんだから全通り計算させたらしまいだろ
660デフォルトの名無しさん:2008/05/05(月) 16:43:37
661デフォルトの名無しさん:2008/05/05(月) 17:22:14
>>656
>最小コストと最大コストの推測、コストの分布の概略を掴む。

最適化手法からそのような結果は出てこない。
662デフォルトの名無しさん:2008/05/05(月) 17:24:43
>>659
基本的にはその通りなんだが、けっこう大変なんだぞ。
663デフォルトの名無しさん:2008/05/05(月) 17:43:23
>>658
組み合わせ最適化問題はどこにでも付きまとう問題で
>>630のような問題は、その一つの例
興味を持たないで済ませられる人は余り居ない。

抽象化したら同じになるけど、問題が余りに広範なんで、
問題毎に使える手法に制限に色々とバリエーションが
出てくるので、問題毎に専門分野を作ってる
抽象化すれば>>630に類する問題をまともに扱っている
人はその道の専門家でいいんじゃないの?
そもそも一般人と専門家って両立する概念なんだから。
664デフォルトの名無しさん:2008/05/05(月) 17:51:15
>>630と似たような感じの問題で、数理計画とか線形計画、GAの専門家なら聞いたことあるが、
ソートの専門家ってのは聞いたことないな。
665デフォルトの名無しさん:2008/05/05(月) 17:52:19
>>663
組み合わせ最適化問題を解くことは非常に有益だし、興味ももっています。
しかし考えてみてください。>>630書いてるやつは>>443なんですよ。
666側近中の側近 ◆0351148456 :2008/05/05(月) 18:08:01
(っ´▽`)っ
テーブルを作って、その直積(デカルト積)を求めて、
ソートすればいいのでは?

とレスをあまり読まずに言ってみましたが何か?
667デフォルトの名無しさん:2008/05/05(月) 18:10:05
>>666
もう少しじっくり読んでくれ。
とりあえず>>443から順番に。
668デフォルトの名無しさん:2008/05/05(月) 18:17:55

>>439>>443>>455>>549>>606>>630>>656とか

なんか全部>>443が書いたみたいに思ってる奴がいるみたいだが
ここじゃ皆「デフォールトの名無しさん」だろ?
>>439!=455とか
書いたところで無意味だし...

ねぇ>>667 =? >>439
669デフォルトの名無しさん:2008/05/05(月) 18:23:38
>>668
>>667だが>>439ではないよ。

>>439>>443>>455>>549>>606>>630>>656
この中で>>439だけは違うやつだと思う。
>>443>>455>>549>>606>>630>>656
こいつらは同じやつだと思う。
670側近中の側近 ◆0351148456 :2008/05/05(月) 18:29:13
|▽`)っ
全て(っ´▽`)っの自作自演だったらどうする?
ID無しの板っていいよね☆自作自演し放題で。
|彡☆
671デフォルトの名無しさん:2008/05/05(月) 19:15:32
そんなセンスねーだろよ。
672側近中の側近 ◆0351148456 :2008/05/05(月) 19:41:29
>>671
(っ´▽`)っ
ある!
(っ´▽`)っは最高20人同時演出可能。
たまに自分のレスだと忘れて、そのレスにマジレスしてしまうことがある。
自分でも勘違いするぐらい、騙されるぐらい自演が美味い。。
673デフォルトの名無しさん:2008/05/05(月) 19:50:21
頭の壊れた奴が住み着いてすっかりスレが腐ってしまった
674デフォルトの名無しさん:2008/05/05(月) 20:14:23
>>673
貴方をはじめ>All except >>443etc の腐ってない新鮮な
頭脳が残っただけが救いだと思おうよ
675デフォルトの名無しさん:2008/05/05(月) 20:21:53
>>674
めでたいやつだな。
複素数の並べ替えはできたのか?
676デフォルトの名無しさん:2008/05/05(月) 20:25:30
ソートの専門家 の検索結果 約 111,000 件中 1 - 10 件目 (0.14 秒)
677デフォルトの名無しさん:2008/05/05(月) 20:32:45
>>674
>>630
ベクトルをグローバルに標準化はできないけど、恣意的に決めればローカルには定義できる。

つまり大小比較できるの?できないの?もっと詳しく説明してほしいな。
678デフォルトの名無しさん:2008/05/05(月) 20:56:58
674と630をどうしても結びつけたい頭の腐った人が居るようでつね
679デフォルトの名無しさん:2008/05/05(月) 21:40:38
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に保存されてしまいます。ぜひ名前をつけたいんですが、どうすればよいのでしょう
ご教示願います
681デフォルトの名無しさん:2008/05/05(月) 22:55:02
ファイル名とブック名を別にするのにはどうすればいいでしょうか?
682デフォルトの名無しさん:2008/05/05(月) 23:02:02
>>676
"ソートの専門家"の検索結果 2 件中 1 - 2 件目

両方とも、このスレwww
683デフォルトの名無しさん:2008/05/05(月) 23:12:27
saveas
684デフォルトの名無しさん:2008/05/05(月) 23:17:39
>>682
ソートの専門家は種類が多過ぎてもはや専門家とはみなされてないだけだろ。
昔48種に大分類されたらしいが、その後もでるわでるわバリエーションの山。
分類プロジェクトは頓挫中。
ソートくらい奥深い世界は無いみたいだ。たかがソート、されどソート。
685デフォルトの名無しさん:2008/05/05(月) 23:21:26
NSPを解くのも、ソートの専門家なのか?
686デフォルトの名無しさん:2008/05/05(月) 23:22:05
ソートなんてクイックソート+選択ソートで実装すればまず困る事は無いわ。
687デフォルトの名無しさん:2008/05/05(月) 23:22:56
しっー
そーとしておけ
688デフォルトの名無しさん:2008/05/05(月) 23:23:38
場合によってはバケツソートを使えないようでは
ソートの専門家とは言えない。
689デフォルトの名無しさん:2008/05/05(月) 23:24:52
>>684
もはや何を言いたいのかよくわからんが、今や専門家と看做されてないなら、
「ソートの専門家」じゃないだろ。
690デフォルトの名無しさん:2008/05/05(月) 23:26:10
>>688
え?アルゴリズムが違うと、結果も違うのか?
691デフォルトの名無しさん:2008/05/05(月) 23:28:15
「専門家」なら、バケットソートって言うだろ、JK
692デフォルトの名無しさん:2008/05/05(月) 23:31:28
>>690
これはひどい
693デフォルトの名無しさん:2008/05/05(月) 23:31:52
>>691
専門家はそんなくだらない事より本質を重要視する。
694デフォルトの名無しさん:2008/05/05(月) 23:33:33
いいかげんにしとけよ
695デフォルトの名無しさん:2008/05/05(月) 23:51:17
頭の中をソートしてくれ
696デフォルトの名無しさん:2008/05/05(月) 23:57:40
それはやめといたほうがいい
てか、上げるなよ
697デフォルトの名無しさん:2008/05/06(火) 00:14:14
専門家以前に人としてバルブソートだろ。
698デフォルトの名無しさん:2008/05/06(火) 00:24:42
このスレのレスを、くだらない順にソートせよ
699デフォルトの名無しさん:2008/05/06(火) 00:31:46
専門家がいるのなら本の一冊や二冊出してるだろ
700デフォルトの名無しさん:2008/05/06(火) 01:18:08
ソートの味方くらいでいいんじゃね
701デフォルトの名無しさん:2008/05/06(火) 01:34:47
ソートに味方も敵もあるかよ
番号が付いてる限りソートされていると感じる
脳みそにとってはな
702デフォルトの名無しさん:2008/05/06(火) 11:43:51
グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー
グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー
グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー グランドシティ大宮イーストタワー
703デフォルトの名無しさん:2008/05/06(火) 13:31:48
704デフォルトの名無しさん:2008/05/06(火) 14:30:12
近未来と近過去
熱い場所だ
担当者ご苦労さん
705デフォルトの名無しさん:2008/05/06(火) 19:16:16
ここはなんのスレ?
706デフォルトの名無しさん:2008/05/06(火) 20:39:34
ソートの専門家専用スレです。
707デフォルトの名無しさん:2008/05/06(火) 21:37:06
その名はExceler
708デフォルトの名無しさん:2008/05/07(水) 02:11:55
なんで自演とかを気にするんだおまいら?
709デフォルトの名無しさん:2008/05/07(水) 08:26:19
ところで>>630よ。うまくソートできたか?
わしはできたぞ。
正確に言うとソートじゃない。最適な組み合わせを求めたということ。
710708:2008/05/07(水) 09:20:21
>>708
こういうことが起こりうるから
711デフォルトの名無しさん:2008/05/07(水) 11:08:37
M=1000の時でホテル代の価格の組が全部異なり
家族構成も全部異なる場合で実例が出てくるまで
誰も信じないと思う。本当にソートされてるのか
も示せないとな。
712デフォルトの名無しさん:2008/05/07(水) 11:55:25
>>711
M=14まででお願いします。ソルバーの制限で200変数までしか扱えないから。
ただしM=14の時に現実的な時間で解けるかどうかわからないけど。
それからソートと呼ぶのはやめないか?
713デフォルトの名無しさん:2008/05/07(水) 12:40:47
最適組み合わせの問題って、ノーベル賞クラスじゃなかったか?
714デフォルトの名無しさん:2008/05/07(水) 12:49:53
>>713
このスレからノーベル賞受賞者が(・∀・)ワクワク
715デフォルトの名無しさん:2008/05/07(水) 13:13:03
>>709がウソつき扱いされているみたいだな。不思議な話だ。こんなのできて当たり前なのにね。
前から思ってたんだかこのスレに出入りしてるやつら中学生が多いだろ。
レベル低すぎて話にならん。せめて高校出てからデビューしろ。
716デフォルトの名無しさん:2008/05/07(水) 15:16:37
中学生が高校生に、受験の答え教えてくれって頼む、そんな主旨のスレだからだと思う
717デフォルトの名無しさん:2008/05/07(水) 15:22:28
'''八島 良太'''(やしま りょうた、[[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年生]]
718デフォルトの名無しさん:2008/05/07(水) 16:16:48
14*14=196
15*15=225 >200
つまりLPですね。よくできました。
719麻雀を作りたい:2008/05/07(水) 17:48:28
OS:winXP
excel2000

VBA実行中に、ユーザにいったん制御をもどして、シート上の特定範囲のセルをクリック。
そのクリックをトリガーに処理再開。

というような事をしたいのですが、どうすれば実現できるかわかりません。
良い案やヒントないでしょうか・・?
720デフォルトの名無しさん:2008/05/07(水) 18:02:20
セルに対しては通常のクリックは検出できないと思うので、右クリックかダブルクリックのイベントを検出する
どうしてもクリックがよい場合はクリックイベントを検出できるもの(ボタンやシェイプ)を追加する
721麻雀を作りたい:2008/05/07(水) 18:18:07
>>720
コメントありがとうございます。

BeforeDoubleClick
SelectionChange
とかを使えば良いのかなあとは思ってました。

引っかかってるのは、「VBA実行中に、ユーザにいったん制御をもどして」のところなんです。
中断前の変数の状態を保持したまま、いちどユーザに制御を戻して、シート上のセルを(ダブルor右)クリックでVBA再開。

つまり
@自分の番になったら一枚ツモってきて
Aいらいない牌を手牌の中から一枚選択して(シート上のセルをクリックして)、
Bすてる。
ってことをしたいんですね。

@まではVBAで処理して、Aの動作はシート上のセルをクリックすることで選択して、
BからはVBAにまた処理を戻す。

・・・自分の実力じゃ無理かな・・・orz
722デフォルトの名無しさん:2008/05/07(水) 18:40:04
>>721
セルを使わずに、全部ボタンをはっつけてしまったほうが楽なんで内科医?
723デフォルトの名無しさん:2008/05/07(水) 18:51:17
フォームとボタン使えば?
724麻雀を作りたい:2008/05/07(水) 19:20:52
そーですね・・。
cell_雀みたいなの作りたかったですが、あきらめようかな。
725デフォルトの名無しさん:2008/05/07(水) 20:39:11
フォームを作成してデバッグ作業をすると、エラーが出たときにコードが表示されずに
フォーム画面が出るため、どこの行でエラーが起きてるのかわかりません。
解決方法ご教授願います
726デフォルトの名無しさん:2008/05/07(水) 21:32:21
ところで>>630はホテル料金の計算できたのか?
>>656
>その考え方は殆どExcelをExcelとして使っていないから出てくる考え方だな
なんていうくらいだから当然できたんだろうな。
727デフォルトの名無しさん:2008/05/07(水) 22:04:47
>>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
エクセルツールのテストって一般的な言葉?
730デフォルトの名無しさん:2008/05/08(木) 00:09:24
「Excelで作成したツールのテストを自動化したい」だから俺は別に違和感ないけど・・・
んなことより、>>728は無理じゃないのかなぁ?
フォームをキャプチャ→画像解析→テキスト取得とか?ごめん、嘘・・・
731デフォルトの名無しさん:2008/05/08(木) 00:29:24
>>728
>>729
エスパー&エクセル素人
732デフォルトの名無しさん:2008/05/08(木) 00:32:01
728です。レスありがとうございます。
やっぱり無理なんですかね。
そもそも、MsgBoxとかもやっているので、どうやってOK押すかとか前途多難です。
みんな手でテストやってるのかな・・・。
733デフォルトの名無しさん:2008/05/08(木) 03:08:30
>>732
Win32APIを使えば、OKボタンもAPIでクリックできるけど、より良い方法は、
テスト対象のメソッドでダイアログ入力待ちなどが起きないような設計にする。
とはいえ、どこかでMsgBoxを出さざるを得ないだろうから、そこはマニュアルテストとかかな。
734デフォルトの名無しさん:2008/05/08(木) 07:57:19
>>728の説明で回答できる人ってスゴイね
俺にはどっちがツールなのかすら分からないよ
735デフォルトの名無しさん:2008/05/08(木) 08:30:10
そんなに誉めるなよ
736デフォルトの名無しさん:2008/05/08(木) 16:11:05
いや実際、配列とか定数とか何に使うの?とか思ってる俺からしたら紙だ。
737デフォルトの名無しさん:2008/05/09(金) 13:03:03
モジュールの自動削除って出来るもの?
738デフォルトの名無しさん:2008/05/09(金) 14:48:45
自分は今セルをクリックしたら別のエリアに多行表示できるようにしたいと考えて。
例にすると


セルをクリックしたら、そのセルについたコメント(7~8行ぐらい)の内容を
A15に22R X 7C以上の範囲にそのコメント内容を載せる という物を作ろうとしてるのですが
全く、できず困ってます。

こういうのは可能でしょうか?
739デフォルトの名無しさん:2008/05/09(金) 17:20:23
セルに表示されないデータを埋めこむってこと?ソートとかかかったらどうなるんだろ?ってかできるの?
740デフォルトの名無しさん:2008/05/09(金) 18:57:46
>>737
出来る

>>738
可能

>>739
「セルのコメント」だろ
741デフォルトの名無しさん:2008/05/09(金) 22:52:31
ごめん、俺が今やりたいことを言ってしまった。で、できるの?3文字でいいからヒントください。
742デフォルトの名無しさん:2008/05/09(金) 23:37:18
>>741
でき


743デフォルトの名無しさん:2008/05/09(金) 23:39:06
どっちだよ?
>>737 ttp://www.cpearson.com/excel/vbe.aspx
>>738 range.comment, range.notetext
744デフォルトの名無しさん:2008/05/09(金) 23:58:10
並べ替えた後、セルを特定することは普通可能
それはソート前にセル探すのとどう違うんだ
と言うか、出来るように設定しておけばいいだけでわ
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-プロジェクトプロパティ
→保護タブ
→パスワードを入れる
749デフォルトの名無しさん:2008/05/10(土) 11:23:54
>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
>>749 できました! ありがとうございます
751デフォルトの名無しさん:2008/05/10(土) 11:50:35
あとは
A15の縦の長さを 常時コメントと同じ高さにあわせるように応用するだけか・・・
752デフォルトの名無しさん:2008/05/10(土) 12:04:27
A15の高さ=コメントの行数x18ピクセルになるマクロを組み込むには…どうすればええやろ。
753デフォルトの名無しさん:2008/05/10(土) 18:48:39
いい加減、マクロの記録に気づけよ
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の行を実行するときに、
 オブジェクトは、このプロパティまたはメソッドをサポートしていません
と叱られます。
755デフォルトの名無しさん:2008/05/11(日) 01:33:18
EXCEL2003のVBAで、シートの再計算を強制的に実行するにはどうすれば良いでしょうか?
756デフォルトの名無しさん :2008/05/11(日) 04:35:17

・資金ゼロでも優秀な開発者は一千万円の特別賞あり、デモトレードなのに優勝したら三百万円の賞金

●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
759デフォルトの名無しさん:2008/05/11(日) 12:11:02
>757
ありがとうございました。できました。

以下、俺様メモ。
VBAのオブジェクトブラウザを使って
クラスSheetXのメンバをオブジェクト名(たとえばCommandButton1)で探すこと。
ボタンのクラスはCommandButton
760デフォルトの名無しさん:2008/05/11(日) 19:04:23
>748
>→パスワードを入れる

でけた。ありがと。

761デフォルトの名無しさん:2008/05/12(月) 14:27:05
Dim StrData(1 To 13, 1 To 2) As Variant
これってどういう意味ですか?
762デフォルトの名無しさん:2008/05/12(月) 14:50:23
>>761
イメージ的にはA1:B13みたいな縦13*横2の二次元配列。
変数名からしてString型にした方がいいと思うが。
763デフォルトの名無しさん:2008/05/12(月) 15:59:00
>>762
ありがとう、把握しました。

後、マクロを無効にしないとエディターで編集が出来ないんですが、これはどうすればいいんでしょう。
csvを読み込んで配置するマクロを編集してるのですが、無効にするとデバッグ出来ません。
764デフォルトの名無しさん:2008/05/12(月) 19:29:24
一週間以上たったが>>630はできなかったみたいだな。DQNが消えてこのスレも健全化するだろう。
765デフォルトの名無しさん:2008/05/12(月) 20:10:15
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に直して数字を取得したいのですが
何か助言もらえないでしょうか?
766デフォルトの名無しさん:2008/05/12(月) 21:00:48
RtlMoveMemoryとか使えばいいでね?
767デフォルトの名無しさん:2008/05/12(月) 22:04:34
後はいちいち蒸し返すDQNが居るだけだな
768デフォルトの名無しさん:2008/05/13(火) 01:36:36
>>764
甘いな
769デフォルトの名無しさん:2008/05/13(火) 08:28:32
不正アクセスから、マクロ及びデータを守りたいのですが
パスワードの不正解析されても、データ等を守る方法はない?
770デフォルトの名無しさん:2008/05/13(火) 12:27:06
不正解析というか、バイナリエディタで、パスワード上書きされたら終わりだしな。
771デフォルトの名無しさん:2008/05/13(火) 12:34:14
本体から読み込む形にして、不正処理があったらOSから終了させれ
不正アクセスと断定できるなら、偽装データを渡したり

どこまで相手にするかにもよるけど、ある程度以上のクラッカには対策立てられぬ
そもそもマクロ無効で覗かれたらエクセルじゃどうしようもないし、エクセルのパスは飛ばせる裏技あったような
772765:2008/05/13(火) 18:42:38
>>766
遅くなりました。
情報ありがとうございます。
試してみます。
773デフォルトの名無しさん:2008/05/13(火) 22:45:12
774デフォルトの名無しさん:2008/05/14(水) 02:04:38
>>769
できるよ。
以上。
↓次どうぞ
775デフォルトの名無しさん:2008/05/14(水) 11:51:19
XP、EXCEL2003です。
シート上の図(Shape)を、すべて削除する方法を教えて下さい。
よろしくお願いします。
776デフォルトの名無しさん:2008/05/14(水) 13:26:15
モジュールのインポートを一つずつやるのがめんどくさいんだけど、
これって、フォームとかと一緒にまとめられないの?
777番組の途中ですが名無しです:2008/05/14(水) 15:48:05
>>775
forループで↓をActiveSheet.Shapes.Count分回せばいいかも
ActiveSheet.Shapes(i).Select
Selection.Delete
※iはループカウンタ
778デフォルトの名無しさん:2008/05/14(水) 15:53:29
ループの必要はないよ
ActiveSheet.Shapes.Delete
779775:2008/05/14(水) 18:14:41
>>777,778
レスありがとうございます。
780デフォルトの名無しさん:2008/05/14(水) 19:09:02
>>778
ふーん、いろいろあんだねぇ
781デフォルトの名無しさん:2008/05/14(水) 22:20:07
VBAを学ぶのにオススメの書籍などはありますか?
目的は、ある外部のデーターベースから、
ブックを開いたときに、選択した情報を効率的に
集めてくるみたいなものをつくりたいのですが。
因みにプログラムの経験はVBAが2週間で、他の言語は知りません。
782デフォルトの名無しさん:2008/05/14(水) 22:47:08
>>781
ごめん。まったく何を言ってるのかわからない。
みんなはわかるの?
783デフォルトの名無しさん:2008/05/14(水) 22:48:32
データベースとの連携を中心にしたものなら、例えば

仕事に役立つ Excel & Access データベース連携テクニック Softbank

といったものがあるけど、
これはある程度VBAを知っている事が前提なんで、やはり最初に入門を中心に勉強してからの方が良いんじゃね?

784デフォルトの名無しさん:2008/05/14(水) 22:52:55
>>781
ExcelのVBAなんか覚えるよりデータベースの方が役に立つだろう?
785781:2008/05/14(水) 22:57:39
ソフトバンクからでてる初めてのVBAという本の内容は一応マスターしました。
>>783さんの挙げてくださった書籍の姉妹本だと思います。
しかし、Dimが出てこなかったりして、結局出来るようになったことは
セルに色をつけたり足し算したりシートの名前を変えたりといったレベルです。
もっとレベルの高いVBAを勉強したいです。
わかりにくくて申し訳ございません。
786デフォルトの名無しさん:2008/05/14(水) 23:01:30
>>784
仕事で大量のデーターを扱うので、データーベースはきちんと扱えるようになりたいです。
SQLとかを勉強したほうがいいのでしょうか?
仕事とは別にVBAを打てるようになって、ゲームとか作りたいです。
現時点のレベルは低すぎるわけなのですが・・・
787デフォルトの名無しさん:2008/05/14(水) 23:09:09
>>786
仕事はデータベース
VBAは趣味のゲームで
788781:2008/05/14(水) 23:12:13
>>787
すいません、ド素人なのでよくわからないのですが
データーベースという、VBAみたいなジャンルがあるのでしょうか?

周りにパソコンに詳しい人がいなくて困っています。
セクハラ酷いし。あぁ会社行きたくない・・・
789デフォルトの名無しさん:2008/05/14(水) 23:14:35
>>788
自分でデーターベースからブックを開くと言ってたじゃないか。
790デフォルトの名無しさん:2008/05/14(水) 23:25:06
visual basic6ぐらいのデータベース連携の本買って
vbaに関してはエクセルのヘルプよく読め
791デフォルトの名無しさん:2008/05/14(水) 23:26:11
無料のRDBが沢山有る現在でも、周囲に詳しい人間が居ない状況でデータベース勉強するのはしんどいぞーーーー
792デフォルトの名無しさん:2008/05/14(水) 23:44:05
VBAでゲーム作る奴は変態
793781:2008/05/14(水) 23:45:46
なるほど、自分がやるべきことがわかってきました。
親切に答えてくれた方々、ほんとうにありがとうございました。
794デフォルトの名無しさん:2008/05/14(水) 23:48:05
>>792
しかしVBAの正しい利用方法だ。
795デフォルトの名無しさん:2008/05/15(木) 07:44:28
>>789
お前、馬鹿
796デフォルトの名無しさん:2008/05/15(木) 07:55:47
>>788
年上のお姉さんに当てられたり、美少女の後輩にまさぐられたりする職場なんですね、俺と変わってくれ
797デフォルトの名無しさん:2008/05/15(木) 08:00:39
データベース/SQL使うんなら、
ExcelVBAより先にAccessのクエリー/マクロ/レポートを覚えた方が金になるぞ
798デフォルトの名無しさん:2008/05/15(木) 08:15:17
このスレでは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の箇所に挿入できるようにするには
どうすれば良いのでしょうか。
よろしくお願いします。
800番組の途中ですが名無しです:2008/05/15(木) 14:03:07
Excel2003のVBAでcontinue forが使えないのは仕様ですか?
801デフォルトの名無しさん:2008/05/15(木) 16:56:49
>>799
スクロールの問題……じゃないよな
802デフォルトの名無しさん:2008/05/16(金) 15:32: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
803799:2008/05/16(金) 17:00:43
>>801
レスありがとうございます。
スクロールの問題ではありません。
(1)の現象になったので、
マクロと同じ操作をして、マクロ記録してみたら
(2)になりました。
804デフォルトの名無しさん:2008/05/16(金) 18:30:33
>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
805799:2008/05/16(金) 20:29:24
>>804
レスありがとうございます。
うまくいきました。
806デフォルトの名無しさん:2008/05/16(金) 20:37:24
30125なら上位3桁だけとって、゙30100゙から100刻みで表示させたい。
0.002354なら゙0.00235゙から0.00001刻みでグラフの軸に表示したいのです。
何かよい方法はありませんでしょうか?
807799:2008/05/16(金) 20:47:07
>>804
別質問ですけど、
804で挿入したオブジェクトのnameは、
どのようにすれば取得できるのでしょうか。
808デフォルトの名無しさん:2008/05/16(金) 23:37:41
仕事でマクロを使って制御のシミュレーションをしたいのですが
1つのプロシージャ内でループ演算をしつつ、他のプロシージャを実行して
変数を変更したいと考えています。
複数のプロシージャを並列処理できる方法はないのでしょうか?
809デフォルトの名無しさん:2008/05/17(土) 00:12:29
ActiveX EXEを作れば可能。
Win32APIのスレッドも使えるかもねー
810デフォルトの名無しさん:2008/05/17(土) 01:15:28
既出だったらすみません。

excel2000+winXpで開発してるんですが、
処理を走らせるとメモリの使用率がたまる一方で
解放されている気配を感じません。

しまいにはメモリが足りませんとエラーになり
落ちてしまいます。

助けて!!1

DAO3.6使ってるんですが関係しますかね?
メモリを解放する方法ってありますか??
811デフォルトの名無しさん:2008/05/17(土) 06:59:32
>>810

DoEvent とか
動的配列を使ってるなら必ずeraseするとか
812デフォルトの名無しさん:2008/05/17(土) 08:39:43
>806
刻み幅等を計算する方法を知りたいというのが主旨かな?

30125の常用対数は、log(30125)/log(10) =4.47892705558292
切り上げて、5
上位3ケタだけ取るので、刻み幅は、10^(5-3)=100

切り上げは、round(x-0.5)+1 という感じかな。
813デフォルトの名無しさん:2008/05/17(土) 10:29:50
>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
814デフォルトの名無しさん:2008/05/17(土) 14:03:34
>>808
複数のExcelインスタンスを起こして、マルチプロセスでやれば?
これならWin32APIなんか使わずにできるが
815デフォルトの名無しさん:2008/05/17(土) 19:17:01
timer使え
816デフォルトの名無しさん:2008/05/18(日) 14:10:29
ループの中でたのプロシージャを呼び出せばいい
灰次
817デフォルトの名無しさん:2008/05/18(日) 23:31:42
マクロでNORMDISTを使いたいんですが、エラーが出てしまいます。

マクロではどのように記述すればNORMDISTは使えるのでしょうか?

誰か教えてください
818デフォルトの名無しさん:2008/05/19(月) 11:05:13
Excel2000上で動的に配置したチェックボックスにイベント処理を追加したいのですが
方法がわかりません。ヒントだけでもいいのでお願いします。
819デフォルトの名無しさん:2008/05/19(月) 16:39:14
>>818
classモジュール使えばできるよ
820デフォルトの名無しさん:2008/05/19(月) 16:46:45
>>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

と入力し別ファイルのシートのセルを選択したいのですが、
どのように直せばいいか、教えていただきたいです。
よろしくお願いします。
822デフォルトの名無しさん:2008/05/19(月) 21:26:10
>>821
ちゃんと目的のbookが開いているなら、シート名「a」のシートがあれば問題ないよ
823デフォルトの名無しさん:2008/05/19(月) 21:55:45
>>821-822
シート上に置いたコントロールツールボックスのコマンドボタンならそんなんでまともに動くわけねーよ。
シートや範囲をちゃんとブックから明示しないと。
824822:2008/05/19(月) 22:04:21
>>823
なるほど、 シート上に置いたコントロールツールボックスのコマンドボタン
おまい天才!
スレ汚しスマソ
825デフォルトの名無しさん:2008/05/20(火) 20:21:39
>>823のなかなかのエスパーぶりに嫉妬
826デフォルトの名無しさん:2008/05/20(火) 21:28:05
別に>>823は普通だろ?
Formのコマンドボタンなら>>821でも動くだろうが、どこに書いても同じように動くコードを書かんとね。
827デフォルトの名無しさん:2008/05/20(火) 23:30:47
>>826
どこに書いても同じように動くコードを書く必要はない
コードを書いたクラスでまともに動けば問題ない
828デフォルトの名無しさん:2008/05/21(水) 00:21:17
質問させて頂きます。

デジタル署名付の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

といったかんじです
829デフォルトの名無しさん:2008/05/21(水) 01:40:10
>>828
オラクル関係なくね?
接続して閉じてるだけだろ?
それとも、オラクルに繋がなければ問題は解消されるの?
830826:2008/05/21(水) 07:43:54
>>827
そりゃ確かにそうだね。
冗長な記述を避けるためにもMeとか書かんからね。
>>821のコードに関してはということ。
831826:2008/05/21(水) 07:46:16
Me.を書かんことはちょっと違うか。
まどうでもよい。
832デフォルトの名無しさん:2008/05/21(水) 07:59:09
書式設定指定したら?
833デフォルトの名無しさん:2008/05/21(水) 17:42:10
XP、EXCEL2003です。

特定のディレクトリの直下にあるファイル(複数)のファイル名を
全て取得する方法を教えて下さい。
よろしくお願いします。
834デフォルトの名無しさん:2008/05/21(水) 17:49:26
>>833
ちょこちょこ質問掲示板見てると週に1回は遭遇する質問
ググれば腐るほどコードがある
個人的にはfilesystemobjectを使うのが一番効率いいと思う
835833:2008/05/21(水) 19:20:12
>>834
レスありがとうございます。
失礼いたしました。
836デフォルトの名無しさん:2008/05/21(水) 21:22:28
fsoはネットワークドライブ相手だったりするとテキメンに
速度が落ちたりするから困る。
 あと、ワイルドカードが無いのはどーゆーことだ。
837デフォルトの名無しさん:2008/05/21(水) 23:21:02
>>836
独り言はチラシの裏に書け
838デフォルトの名無しさん:2008/05/22(木) 06:44:14
�確かfsoは、クエリとってからのファイル追加や削除、内容変更に
伴う更新もかなりの直近まで自動的に更新してくれる中々の
優れモンだったという記憶が....
Kernel32.DLL のAPIを使って自分でクエリした場合は、
ファイル数が多く、激しく更新されるような場合は、取得情報と
実態の間に食い違いが発生してユーザーはパニくるのがオチなんだが
(これもチラ裏に書くべきだったか)
839デフォルトの名無しさん:2008/05/22(木) 18:21:06
わざわざfsoやapi使わんでもDir()関数使えばよい
840デフォルトの名無しさん:2008/05/22(木) 21:25:32
Dirだとパスの長さが255以上になると確かエラーになる。
841デフォルトの名無しさん:2008/05/23(金) 13:23:12
sage
842デフォルトの名無しさん:2008/05/23(金) 23:07:41
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関数を使えば…、というところまで来たのですが、二点のセルの値を見て、
表から一つの値を出力する、というところがわかりません。
何卒、ご指導の方、お願いします。
843デフォルトの名無しさん:2008/05/24(土) 00:01:34
>>842
VBAに関係ないと思うのだが。
vlookup以外にもlookupやmatchもあるんだから何とかなるだろそれくらい。
844デフォルトの名無しさん:2008/05/24(土) 00:16:49
なんとかするのがお前たちの仕事だろ。

あのな、上から目線もいいけどここはVBAに詳しくない奴らが
何をどうやったらいいかを聞きにきてるスレなわけ。
その手ほどきをしてやった上でそういうこと言うならいいけど、
回答も示さずにそういうこと言うのは荒らしとかわんねーんだよ。
こたえる気が無いなら質問スレから消えろよカスが。


↓じゃ、模範的回答を頼む
845釣られてみる:2008/05/24(土) 00:26:30
いや、それだけの情報でVBAでどうしろと。
846デフォルトの名無しさん:2008/05/24(土) 03:07:26
スレタイ読め。ここは質問スレであって回答スレではない。
847デフォルトの名無しさん:2008/05/24(土) 03:09:22
>>846
こいつ頭悪そうだな(ゲラゲラ
848デフォルトの名無しさん:2008/05/24(土) 07:33:50
>>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
としてオートフィルで。
849デフォルトの名無しさん:2008/05/24(土) 07:53:02
つづき

処理用シートで
C1には
=A1&B1

D1には
データ用シートはSheet1にあるなら
=VLOOKUP(C1,Sheet1!A:D,4,FALSE)
としてできあがり。
850デフォルトの名無しさん:2008/05/24(土) 08:12:05
>>842
C1に
=index(「データの範囲」,match(B1,「商品名の範囲」),match(A1,「店舗名の範囲」))
と入れる

これVBAじゃないから、次からはEXCEL総合相談スレの方へ行ってくれ
851デフォルトの名無しさん:2008/05/24(土) 10:55:08
VBA初心者ですが質問させて下さい。
Module1で宣言したパブリック変数をThisWorkbookで参照する事はできないのでしょうか。

状況を説明しますと、nullpo.xlsというマスターファイルがあります。
その中のModule1で処理を実行すると、public変数をインクリメントします。

"名前を付けて保存時"の保存ダイアログで、あらかじめ表示されるファイル名に
そのpublic変数を出したいのですがうまくいきませんでした…
852851:2008/05/24(土) 13:22:46
クスン…終わらないと帰れないんです
みなさんの力を貸して下さい。

言い忘れましたがわたしは女です。
853デフォルトの名無しさん:2008/05/24(土) 13:26:25
>852
俺が何でも答えますよ
もうちょっとしたら家に着くから待っててね

ところで今日は帰ったらどうするの?
汗かいちゃったってシャワーでも浴びるのかな?かな?
854851:2008/05/24(土) 13:34:41
>>853
ありがとうございます。
彼氏と待ち合わせしてるんです。
855デフォルトの名無しさん:2008/05/24(土) 13:39:32
VBAを自由自在に扱うために、VBの勉強をしようかと思うのですが
VBの種類が多すぎてどれを勉強したらいいのかわかりませんでした。
VBAのためにVBを勉強するには、どのVBを勉強すればいいのでしょうか?
856853:2008/05/24(土) 13:41:43
死ね。お前に教えることは何もない
自分でどうにかするんだな
857853:2008/05/24(土) 13:42:33
856は>854宛てな
858851: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だね。
861デフォルトの名無しさん:2008/05/24(土) 15:25:38
>>856
手のひら返しワロス
862デフォルトの名無しさん:2008/05/24(土) 15:29:18
>>851
そのpublic変数値を返す、public関数でも作れば?

つか、ダイアログに値をいれて有効にする処理が出来てないだけの気がするが…
863855:2008/05/24(土) 15:29:35
>>860
ありがとうございます。
864デフォルトの名無しさん:2008/05/24(土) 15:39:20
>>860

VB6.0やVB.NETをVBAを使えない人に勧めちゃらめどちらも超ベテラン向けだよ
VBScript位しか残らないけど、VBAとはちょっと合わないかも知れないね。
やっぱしVBAはVBAで覚えるしかないのかな(鬱
865デフォルトの名無しさん:2008/05/24(土) 16:18:52
VBAを覚えたいのにVBAを利用しない意味がわからない
866デフォルトの名無しさん:2008/05/24(土) 21:16:49
>>842
商品と店舗の組み合わせが疎であるなら>>848の方法
組み合わせが密であるなら>>850の方法がいいだろうね。

ところで解決したのかどうか反応がほしいもんだね。
コミュニケーションしようや。
867デフォルトの名無しさん:2008/05/24(土) 21:25:26
>>865
これほんとにその通り。
なんでVBAを覚えるためにVBを覚えたいなんて言うのかな。
VBを覚えたいんだって素直に言えばいいのに。
868デフォルトの名無しさん:2008/05/24(土) 21:29:23
VBってMSDNライブラリ使えるの?
869デフォルトの名無しさん:2008/05/24(土) 21:38:17
VBAを体系的に勉強するのにいい本とかありますか?
870デフォルトの名無しさん:2008/05/24(土) 21:46:29
実戦力UP! Excel VBAドリル式問題集
871デフォルトの名無しさん:2008/05/24(土) 21:47:13
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
のところで止まってしまいます。
どこがおかしいのでしょうか?
また、もっといい方法はありますか?
873デフォルトの名無しさん:2008/05/24(土) 23:21:29
>>872
「数字が入ってるセル」なら条件をb≧0にすれば?
874デフォルトの名無しさん:2008/05/24(土) 23:33:33
負の数は数字ではないと?
875デフォルトの名無しさん:2008/05/24(土) 23:38:47
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
負の数は存在しないデータなので、大丈夫だと思います。


エラーがでた原因がわかる方はいらっしゃりましたら、お答えいただきたいです。
878875:2008/05/24(土) 23:42:23
ごめん入れ子になってたんだな。最初のforしか見てなかった。
879デフォルトの名無しさん:2008/05/24(土) 23:43:21
end ifが無いな
880872:2008/05/24(土) 23:43:44
>>875
すいません初心者なもので、いまいち意味不明です。
勉強して理解したいとおもうのですが、参考までにどういった
勉強をすればいいか教えてください。
オススメの本、サイト等等・・・
881デフォルトの名無しさん:2008/05/24(土) 23:46:56
>>877
<>"#na n/a"
エラー値でなければ って条件と思っているのであれば間違い。
エラー値かどうかを調べたいのならiserrorを使う
882872: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という存在を知りませんでした。
勉強不足でした。
ありがとうございます。
884デフォルトの名無しさん:2008/05/24(土) 23:53:46
> 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

すいませんでした。
886デフォルトの名無しさん:2008/05/25(日) 00:18:54
まあなんだ
ちょっと落ち着け
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(@@@@@@)を多く入れたのが原因であれば標準モジュールを何らかの形でいったん無効にすれば早くなるのかとかスクリプトなどを使って別のブックからシートを移動させるなど・・・・他の代替案はありえないでしょうか?
何分わかりづらい質問で申し訳ありませんが、ご回答いただければ幸いです。
よろしくお願いします。
888デフォルトの名無しさん:2008/05/25(日) 12:11:58
まず計測しろよ。んで、遅い原因を特定してから、もっとわかりやすい文章で再質問な。
889デフォルトの名無しさん:2008/05/25(日) 12:58:21
自動計算やめてシートコピー
890876:2008/05/25(日) 13:03:06
>>887
質問する方のレベルのものが下手なレスをつけるのもどうかと思うが、
設問説明に既に回答があるような・・・
経理処理なのでシート数が大量となるのはある程度やむを得ないでしょうが、
それにしても、10分というのはかかりすぎというか、長いですね。
1 object.enablecalculation=falseを設定されていると言うことですが、
必要なシート全てにされているかどうか
2 通常、速度を速める常套手段の
application.screenupdating=false
application.visible=false
application.enableevents=false
で、どうなるか試してみたらいかがでしょう

私の質問は解決しました。
直列処理のはずが、並行処理になったのかとの疑問からでしたので。
891デフォルトの名無しさん:2008/05/25(日) 16:55:25
>>887
どこかで見たような質問だな
何でそんなおかしなことするの?
892デフォルトの名無しさん:2008/05/25(日) 16:59:47
>>887に回答する人は次を見てからにしてね
http://www.moug.net/faq/viewtopic.php?t=27321
893釣られてみる:2008/05/25(日) 17:02:02
>>887
別にここはブック提示禁止じゃないから晒してみたら?
894デフォルトの名無しさん:2008/05/25(日) 17:05:09
' ただの荒らしのコピペじゃないかと疑い始めた
895デフォルトの名無しさん:2008/05/25(日) 17:27:39
なんだ、二週間前の話じゃねーか。
第三者によるコピペの疑い濃厚だな。
しかし、誰もプロファイリングしろというアドバイスしないって、mougってどんだけ素人集団なんだよ
896デフォルトの名無しさん:2008/05/25(日) 17:30:54
あー、ひょっとして、シートを一枚sheet.copyで10分かかるってことか?
だったら、プロファイリングも糞も無いな
897デフォルトの名無しさん:2008/05/25(日) 18:13:57
プロファイリングっていうの初めて聞いたorz
898デフォルトの名無しさん:2008/05/25(日) 22:50:47
マルチなら放置
荒らしのコピペなら放置

どっちにしても放置だな
899デフォルトの名無しさん:2008/05/25(日) 23:12:29
セルに記載されている文字列を変数名として認識させる方法はありますでしょうか?もしくは無理ですか?

(1,1) に hoge って文字列が入っていて、VBAの記述内に、
cells(1,1).value = 100  '←これは当然上書きされますが・・・。
のように、変数名として取得して代入が出来たら良いな。と考えております。

なにとぞよろしくお願いします。
900デフォルトの名無しさん:2008/05/25(日) 23:16:16
aaa(1,2,3)
bbb(1,2,3)
2個の同一の配列があるのですが、この二つが同一であるかの判定について質問させてください。

今は配列長を取得して、forで繰り返してaaa(i) = bbb(i) と1要素ずつ判定しているのですが、
もっとシンプルに、行数を少なく判定する方法はありますでしょうか。アドバイスお願いしま!!!
901デフォルトの名無しさん:2008/05/25(日) 23:21:29
>>899
hogeをどこにも使ってないじゃないか。

>>900
原理的に全要素を比較するしか判定のしようがないから、今の方法でいいんじゃない?
902VBAの初心者:2008/05/26(月) 01:57:42
VBAで配列によって書き込む練習をしているのですが想像力が無くどうやってうまくやればいいのか悩んでます。
どなたかヒントをいただけないでしょうか。

この表のような規則と二つの数式を入れたいのですがどうやったらいいでしょうか?
よろしくおねがいします。



http://briefcase.yahoo.co.jp/bc/robert_kubica_bmw/vwp2?.tok=bcUvZBbBSBm6GmJ2&.dir=/&.dnm=Book1.xls&.src=bc
903デフォルトの名無しさん:2008/05/26(月) 02:31:24
>>899>>887のような気がするのは俺だけ?
馬鹿さ加減が似てるんだが。
904デフォルトの名無しさん:2008/05/26(月) 02:38:50
言葉遣いは似てるね、無駄に敬語とか
905デフォルトの名無しさん:2008/05/26(月) 06:21:48
>>899
Common Language Runtime Library を参照設定して
Dim ht As Hashtable
Set ht = New Hashtable

詳しい使い方は
ttp://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard28.htm

別にScripting.Dictionaryでもいいんだけどね。

文字列と添え字のどちらでも変数にアクセスしたいなら
SortedListを使えば可能。
906デフォルトの名無しさん:2008/05/26(月) 06:37:27
>>900
joinして比較
907デフォルトの名無しさん:2008/05/26(月) 07:19:32
それやるならデリミタを変数中に絶対出てこない文字にしておけよ
908デフォルトの名無しさん:2008/05/26(月) 10:41:35
一応ExcelVBAの質問です

プログラム実行中に、ユーザーフォーム上のimageの表示・非表示や、
ラベルのキャプションの変更することは出来ないのでしょうか?

実行中に内容が変更できるオブジェクトはprogressbarのみですか?
909デフォルトの名無しさん:2008/05/26(月) 18:21:24
連投、誠にスマンです

VBAで、作業用シートを作成して、ソートとか
色々やった後、用が済んだらシートを削除するようなプログラムを作って
いるのですが、

sheets(hoge).delete

の後、必ず「データあるけど削除してOK?」っていうダイアログが出てしまいます。
このダイアログに自動的にYesで答えて、プログラムを中断しないように
出来ないでしょうか。
910デフォルトの名無しさん:2008/05/26(月) 19:21:36
なんちゃらAlear = false
911デフォルトの名無しさん:2008/05/26(月) 19:30:16
tが抜けてたorz
DisplayAlertsでヘルプ嫁
912デフォルトの名無しさん:2008/05/26(月) 20:19:11
>>908
UserForm1.Label1.Caption = "testtest"
表示・非表示なら多分 〜.visible = true とか false とかで逝けるんじゃね?
913デフォルトの名無しさん:2008/05/26(月) 21:08:10
>>910
ありがとうございます!
できました。

>>912
プログラムが走っている最中は、フォームの画面更新が
行われないようで、それらが効かんです(T-T
914デフォルトの名無しさん:2008/05/26(月) 21:36:25
Screenupdating=falseが入っていたら画面の更新はされないが、そういうオチか。
915デフォルトの名無しさん:2008/05/26(月) 22:32:05
>>913
ループにDoEvents
916デフォルトの名無しさん:2008/05/26(月) 22:38:57
ちなみに、DisplayAlertsもScreenupdatingもマクロの最後でちゃんとTrueに戻すのが基本だからな
917デフォルトの名無しさん:2008/05/26(月) 23:43:01
質問失礼します。

新しいシートを作成→そのシートにスクリプトやイベントを埋め込む

を自動でやるにはどうしたらよいですか?
もちろん埋め込みたいスクリプト等は事前に作成しておくものとします。
どうすれば、それを新しいシートに埋め込む操作ができますか?

お手数をおかけします。よろしくお願いいたします。
918デフォルトの名無しさん:2008/05/27(火) 00:04:19
1. そのシートにスクリプトやイベントを埋め込まなくてもいいような設計にする
 Workbookオブジェクトにどんなイベントがあるか調べてそれをググれ
2. 今は亡き、石井勝氏のありがたいページを熟読する(合掌)
 ttp://www.morijp.com/masarl/homepage3.nifty.com/masarl/article/excel-decorator.html
3. ここまでで大抵の問題は解決するはずだが、それでも足りない場合は、動的にコードを追加しろ
 vbcomponetでググれ
919デフォルトの名無しさん:2008/05/27(火) 00:08:53
ちなみに3を推奨しないのは、それを実行するPCグローバルなExcelの設定を変更する必要があるから。
マクロの信頼性とは別に、「Visual Basicプロジェクトへのアクセスを信頼する」という設定をしなければならない。
920デフォルトの名無しさん:2008/05/27(火) 00:37:37
>>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とかで振り分けろ。
921デフォルトの名無しさん:2008/05/27(火) 00:59:11
>>917
新規に埋め込まなくても、雛形シートをコピーした新しいブックを作って解決
922デフォルトの名無しさん:2008/05/27(火) 01:23:29
チンコが大きくなるマクロを作ったはいいんですが、どうやって呼び出したらいいんですか?
923デフォルトの名無しさん:2008/05/27(火) 01:26:59
>>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
925デフォルトの名無しさん:2008/05/27(火) 09:05:37
何をやってるのかさっぱりどす
Worksheet("Sheet1").cells(1,i).Name.Name
926913:2008/05/27(火) 09:18:33
>>914-916
ありがとうございます。
Do Events を試して見ます!
927デフォルトの名無しさん:2008/05/27(火) 10:09:15
A1の"セル名"を変えるには、range("A1").value = "ほげ"
どすえ。
928デフォルトの名無しさん:2008/05/27(火) 11:04:14
Excel一般の質問ではないのですが、ExcelVBAのリストボックスの
中身の上下スクロールをマウスのホイールに連動させることは
出来ないのでしょうか?

ググってみたのですが、分かりませんでした。
929917:2008/05/27(火) 15:59:44
>>918-921
ありがとうございます!勉強になりました。
とりあえず一番簡単な921さんの方法を試してみますね。
930デフォルトの名無しさん:2008/05/27(火) 16:02:04
ネタでも「変わらんくて」と言う奴が死ぬほど嫌いだから絶対教えない。

ら抜き言葉でもブチ切れそうなのにさぁ、どうしてわざわざ”な”を”ん”に
置き換えるんだよ最近のゆとりどもは。書いてて違和感ねーのか糞が。
931デフォルトの名無しさん:2008/05/27(火) 16:06:07
>>930
基地外乙w
単にローマ字入力でAが抜けたTypoだろ
932930:2008/05/27(火) 17:00:52
>>931
いや、「分からんくて」「変わらんくて」「倒せんくて」
とか書き込む奴はかなり多いぞ。
そういう言い回しが流行ってんのか?ってほど。
年齢層の低いスレ覗いていないと分からんくても
仕方ないけど…


>>932
>分からんくても
死ね
933913:2008/05/27(火) 17:11:05
ユーザーフォームの更新の件、DoEventsでいけました
ありがとうございました

>>932
それは関西弁っていう日本ではメジャーな言語
934デフォルトの名無しさん:2008/05/27(火) 18:43:46
35才の関西人だが「…くて」は割と使う。
>>930はもう少し視野を広げてみてはどう?
935デフォルトの名無しさん:2008/05/27(火) 19:56:10
テンプレみたらNG質問のようだが、適当なスレが見付からないので教えてください。

ExcelBVAのテクニックは大体わかります。
しかし、「Excelを起動するとVB?が起動し、ユーザーフォームとExcelが分離している状態」
のプログラム技術を身につけたいと思っています。

これを会得するには、やっぱりVBの知識と多大なる努力が必要なんでしょうか?
936デフォルトの名無しさん:2008/05/27(火) 20:19:11
24歳の関西人の俺はつかわない
だがそんなことにマジ切れすとか、情緒不安定なんじゃね?
937デフォルトの名無しさん:2008/05/27(火) 20:49:46
>>935
VBAでできる。
どれくらいの努力が必要かは、君のセンスと知力に依存するので誰も答えられない。
938デフォルトの名無しさん:2008/05/27(火) 20:54:29
>>935
できない私が言うのもなんだが、そんなことできて何がいいの?
939デフォルトの名無しさん:2008/05/27(火) 20:55:50
ユーザーフォームって、マウスホイールに対応してないとか
使いづらいんじゃないすか。

>>936
「マジ切れす」?また怒られるぞ!
940デフォルトの名無しさん:2008/05/27(火) 22:31:35
>>937
うおお、マジですか、VBAでできるの?
怒られそうだがさらに質問。

どうやんの?メニューバーとかどーみてもVBっぽかったけど。
941デフォルトの名無しさん:2008/05/27(火) 22:34:41
>ExcelBVAのテクニックは大体わかります。
>ExcelBVAのテクニックは
>ExcelBVA


ExcelVBAを知らないんだからしょうがないよな
942デフォルトの名無しさん:2008/05/27(火) 22:39:26
エクセルを隠すだけなら

' Excel本体は隠す

Private Sub UserForm_Initialize()

Application.Visible = False

End Sub

やりたいのはこういう事?
943デフォルトの名無しさん:2008/05/27(火) 22:51:25
そうじゃなくて、エクセルを使わずに、フォームだけで何かを
構築したいという事でしょ。
944デフォルトの名無しさん:2008/05/27(火) 22:53:16
>>930
関西人を馬鹿にしとるんかわれぃ!
945デフォルトの名無しさん:2008/05/27(火) 23:06:59
関西人なら「変わらんで」「変わらんかって」だと思うが
946デフォルトの名無しさん:2008/05/27(火) 23:07:23
河内のぉ〜○っさんの歌ぁ〜
947デフォルトの名無しさん:2008/05/28(水) 15:57:23
はじめまして。

リストボックスで選択した項目を任意のアクティブセルに反映させる時、
反映させたくないセルに反映させないようにするにはどうしたら良いでしょうか?

例えば、セル"A1"には反映させたくないけど、"A1"をアクティブにしたまま
リストボックスにて項目を選択して反映させてしまうのを防ぎたいのですが。
948デフォルトの名無しさん:2008/05/28(水) 16:26:21
>>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
949デフォルトの名無しさん:2008/05/28(水) 20:07:47
ありがとうございます
試したけどなかなか理想した感じにできなかったので、
ロック設定で我慢します・・
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じゃないとダメ??

952デフォルトの名無しさん:2008/05/28(水) 21:47:53
>>951
それって、100%ExcelVBAのような気がするけど・・・
953デフォルトの名無しさん:2008/05/29(木) 09:23:10
共有されていないブックを、"読み取り専用"で開いているメンバーを
VBAで調べるのは不可能ですか。
954デフォルトの名無しさん:2008/05/29(木) 09:59:49
VBAにCで言うDefineのようなものはないのでしょうか。
StaticステートメントをDefineのように使うのはおかしくないですか?
955デフォルトの名無しさん:2008/05/29(木) 11:02:16
自分の家でつくったユーザーフォームが友達のPCで開いたら
背景色が変わってたんだけどなんで?

俺excel2000
友excel2002
956デフォルトの名無しさん:2008/05/29(木) 14:31:16
ユーザーフォームの色は、絶対指定と、OSの設定にあわせる方法と
二種類あって、おそらく後者を適用しているのでしょう。
957デフォルトの名無しさん:2008/05/29(木) 17:38:31
VBAに日本語化パッチを当てるにはどうすればいいのでしょうか
958デフォルトの名無しさん:2008/05/29(木) 20:44:31
いろいろと検索してもわからなかったので質問させていただきます。
CSVファイルをエクセルファイルに変換したいのですが、特定の列だけを
文字列として処理を行いたいのです。
また、変換元のCSVファイルの指定をBATファイルを利用したいのですが、
よい手段がわかりませんでした。
なにかいい方法はありませんか??
959デフォルトの名無しさん:2008/05/29(木) 21:15:00
960デフォルトの名無しさん:2008/05/29(木) 22:26:56
VB Editor じゃなくて、自分の好きなエディタでマクロを書きたいのんですが、
何かいい方法ありますか?
今はエディタから全コピーしてVBA側に全ペーストしてます;;
961デフォルトの名無しさん:2008/05/29(木) 22:52:06
俺は秀丸派でCもJAVAも書いてたんだけど
VBA使ってみてビビった。あれはVBAが
元始にして究極のエディタだと思うんだが。
関数の保管とかしてくれるしもう最高。
962デフォルトの名無しさん:2008/05/29(木) 22:52:26
×保管
○補完
963デフォルトの名無しさん:2008/05/30(金) 00:49:04
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

って感じだと思ってます。
965デフォルトの名無しさん:2008/05/30(金) 00:51:28
すみません。2重カキ子しちゃいました。。>>963は無視してね
966デフォルトの名無しさん:2008/05/30(金) 00:53:35
すみません。2重カキ子しちゃいました。。>>963は無視してね
967デフォルトの名無しさん:2008/05/30(金) 00:54:08
>>964
UserFormにOKプロパティを作る
又は、手軽に標準モジュールにPublic変数を宣言する
968デフォルトの名無しさん:2008/05/30(金) 00:54:10
すみません。2重カキ子しちゃいました。。>>964は無視してね
969デフォルトの名無しさん:2008/05/30(金) 00:56:33
>>967
ありがとうございます。

OKプロパティーというのがあるのですね。勉強になります。


#今日は書き込みがやたらエラーになる(:_:)。スレ汚しすみません。
970デフォルトの名無しさん:2008/05/30(金) 00:59:35
>>969
ごめん、UserFormにOKプロパティ作っても、UserFormが閉じたら変数破棄されるからダメだね
Public変数でどうぞ
971デフォルトの名無しさん:2008/05/30(金) 14:30:19
VCで作成したDLLを使用してVBAでプログラマしてます。

Private Declare Function DataRead Lib "ExcelVBA.dll" Alias "_CareerDataRead@4" (strFileName As String) As String・・・@

だと「DLLが見つかりません」と出てきます。そんで、Dllのパスをフルパスにしてやると動作するんですが、そすると他のPCで
パスがないので「Dllが見つかりません。」と出てきちゃいます。

できれば、ブックのあるフォルダにDLLをおいて@のように呼び出したいのですが、無理なのでしょうか?
972デフォルトの名無しさん:2008/05/30(金) 14:46:15
>>971
つ環境変数
973デフォルトの名無しさん:2008/05/31(土) 10:10:45
セルに挿入されているハイパーリンクを普通にクリックして、ページ先に飛ぶようなことを
VBAから実行することは可能でしょうか。

あと、ユーザーフォームにハイパーリンクを張ることは可能ですか?
974デフォルトの名無しさん:2008/06/01(日) 01:36:15
例えば、PC起動時にあるソフトをアップデートしたいとき、VBAできたりするんですか?
975デフォルトの名無しさん:2008/06/01(日) 01:46:21
そんなもんメールで告知しろ。

内部的なソフトで、アップデート(上書き)したいだけなら
バッチファイルとスタートアップのショートカットを駆使すりゃいいやん
976デフォルトの名無しさん:2008/06/01(日) 15:16:33
VBAからSystem.Text.StringBuilderを使うとき、
オーバロードがどのAppend_数字に対応しているか調べるには
どうすればよい?
977デフォルトの名無しさん:2008/06/01(日) 18:51:45
エクセル2000で

指定した名前で
CSVファイルで保存する方法ってわかりますか?
978デフォルトの名無しさん:2008/06/01(日) 19:29:10
>>977
マクロの記録で出てこないか?
979デフォルトの名無しさん:2008/06/01(日) 19:37:44
>>977
使ったことないけど、getsaveasfilename でいいんじゃない?
980側近中の側近 ◆0351148456 :2008/06/01(日) 20:32:46
>>977
(っ´▽`)っ
Excel2000のVBAでCSV保存すると、
日付型はことごとく文字化けするけどなー☆
981デフォルトの名無しさん:2008/06/01(日) 20:44:27
>>978
>>977
サンクス
982デフォルトの名無しさん:2008/06/02(月) 10:24:47
ビジュアル ベーシック フォー 哀川翔
983デフォルトの名無しさん:2008/06/02(月) 15:11:45
>>980
普通に読めますが?
984側近中の側近 ◆0351148456 :2008/06/02(月) 20:44:29
>>983
(っ´▽`)っ
Jan 1 2007とかにならんかね?
985デフォルトの名無しさん:2008/06/02(月) 20:51:41
>>984
文字化け?
986側近中の側近 ◆0351148456 :2008/06/02(月) 20:54:18
>>985
(っ´▽`)っ
これは文字化けじゃないか。
細かいことは気にするな☆
987デフォルトの名無しさん:2008/06/03(火) 00:06:08
いわゆるマクロウイルスとかいうやつのコードの書き方教えて。
ウイルスチェックで引っかかるところを見てみたいだけです。
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


989デフォルトの名無しさん:2008/06/03(火) 13:02:37
ここは手直しスレじゃないんだが。
せめてどんなエラーになったか位書こうよ。
あー、シート名が変数i(不適当な名前だw)に入っているのなら、文字列を組み立てないとダメだね。
>988では"i"と言う名前のシートを探そうとしてしまう。
990デフォルトの名無しさん:2008/06/03(火) 13:03:52
×ご教授
○ご教示
991デフォルトの名無しさん:2008/06/03(火) 14:55:10
>989、990
文字列を組み立てるというアドバイスの元見直しをして、無事完成しました。
スレ違い失礼しました、「ご教示」ありがとうございました。
992デフォルトの名無しさん:2008/06/03(火) 15:38:51
質問したいけど構文ここに書くの面どくせえ
993デフォルトの名無しさん:2008/06/03(火) 18:52:12
・・・

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までかけ
ってやっても線がつながらんのだが。
995デフォルトの名無しさん:2008/06/04(水) 01:32:55
>>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
996デフォルトの名無しさん:2008/06/04(水) 10:34:25
VBAを使用して作成したExcelファイルを立ち上げようとすると、
「問題が発生したため、Microsoft Excel for Windows を終了します。 ご不便をおかけして申し訳ありません。」
というMicrosoftのエラーになり、Excelが開かなくなってしまいました。
中のモジュールを何とか見る方法はないでしょうか?
997デフォルトの名無しさん:2008/06/04(水) 20:06:50
あるセルにある文字列が入っています。特定の文字列では無いのですが、
この文字列から、条件を満たす物を抽出したく考えております。

具体的には、「*」 で囲まれた文字列を抜き出したく考えております。
(「」で囲まれた物以外を削除)

調べてみたのですが、このような処理は可能でしょうか。
可能でありましたらば、教えてくださいませ。よろしくお願いします。 
998デフォルトの名無しさん:2008/06/04(水) 21:23:50
regexp
999デフォルトの名無しさん:2008/06/04(水) 22:58:25
1000デフォルトの名無しさん:2008/06/04(水) 23:08:39
10000ならオマエラの人生幸せ
それ以外なら一生不幸

10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。