エクセルVBA質問&研究板

このエントリーをはてなブックマークに追加
1やみぺぐ
おしながき:
1.質問する時は丁寧に、教えてあげる時は偉そうに。
2.質問に対する答えが返ってこなくても、こかない。
3.回答できる人がいれば、どうぞ質問に答えてあげて
  ください。
4.他人への暴言、卑下は即刻オーナーに言って、調べ
  てもらい、警察へ届け出ます。良識常識のある言葉
  を使いましょう。
5.初心者に優しい板を目指してますが、単に教えて厨
  房なら、無視してもかまいません。
2厨房:01/12/13 21:25
はじめまちて、ばんわ〜♪m−−m
エクセルVBAって何ですか?エクセルは持っていますが、これをどう
いう関係なのかがわかりませぬ。おちえて。
3名無しさん@そうだ選挙にいこう:01/12/14 01:46
>2
VBAっていうのはExcelのオプションだからExcelとは
べつに買わなければいけないものなんだYO!
4厨房:01/12/14 20:32
興味が湧いてきたので、勉強してみようかな。。。
5 :01/12/14 23:59
VBAの入門書はどれがいいですか?
統計・科学技術計算と沢山のテキストファイルの操作などをやる予定なのですが。
6名無しさん@そうだ選挙にいこう:01/12/15 14:25
>>2
エクセルの画面でツール→マクロ→VBEでVBEの編集画面が出る。
ここの画面でコードを編集し、プログラムを作成する。
昔のマクロを汎用性のある高度にしたもの。
>>5
VBAの入門書で良いものはないよ。Netで見るほうが参考になる。
ヘルプを見るのも参考になる。デフォルトではヘルプはインストールされない。
ただしヘルプの日本語は意味を読み取りにくい。(米語の直訳)
7まぐろ:01/12/15 22:40
VBAの達人のみなさま・・・・教えてください
どうしてもわからなくて 住所録を作り、ユーザーフォームで
氏名、電話番号等、データ入力画面を作ったまではいいのですが・・・・

入力する際、その項目ごとに、いちいちかな変換大文字にしなくては
なりません。いちいち変換しなくても、大文字になる設定はどこで
どんなふうにやればいいか・・・・教えてくださいませm(__)m

あと、それに関連してその際入力して、反映されたデータがソートが
うまくいかない・・・。どぼぢて?????
8???:01/12/15 23:59
>>2
「Alt」+「F12」でもOK!
9???:01/12/16 00:00
間違った。
「Alt」+「F11」でもOK!
IMEModeぷろぱちー
11名無しさん@そうだ選挙にいこう:01/12/16 01:57
荒し依頼。

低レベルなアニオタ (自称芸術家・モーツァルティアン・藁)
おおもりよしはる
http://www9.big.or.jp/~yoshioh/
このサイトをよあに@同人板とその仲間達とともに潰してくれる人募集中
>>7
keypressイベントで
strsconv(変換前文字列,vbwide)
はどう?
13 :01/12/16 09:09
>>7
ごめん質問のいみ取り違えた
入力用オブジェクトのIMEModeを変更してみては?

たとえば
text1.imemode = 4
とか。
14まぐろ:01/12/16 11:46
13さん できました〜 ありがとうございますm(__)m (^T_T^)
感謝感謝
15名無しさん@そうだ選挙にいこう:01/12/16 12:51
>>3
うそつくな
1610:01/12/16 17:38
(;_;)
17雷 ぉ ゃι゛ ◆oyajiDa. :01/12/16 18:40
(;_;) ヽ(^ー^ ) ヨシヨシ
アホですね>ALL
19Fuck ◆FuckUzas :01/12/17 00:44
あげ
20 ◆FucKusH. :01/12/17 23:45
age
21名無しさん@そうだ選挙にいこう:01/12/18 01:56
ネタスレ化しそうやね。
「教えて」スレなら総合相談所スレでいいと思ったので一応誘導しとくわ。
http://pc.2ch.net/test/read.cgi/bsoft/1004432306

以降俺は放置プレー。こっちでは一切回答しません。
しまった。ageちまった。
オブジェクトとかプロパティとか馴染みのない言葉が出てくるが
初心者は何か分かるのか?
漏れは初心者の頃理解するのに苦労した。
ヘルプの日本語も分かりにくい説明だった。
24 ◆FucKusH. :01/12/19 00:22
あと
メソッド、キーワード
25メルマガ娘:01/12/19 22:17
http://www.geocities.co.jp/CollegeLife-Cafe/5065/
私が入っているメルマガでいいのがありますよ。ちょうど始まったばかり
なので、初心者さんにはいいかも。
26名無しさん@そうだ選挙にいこう:01/12/20 18:31
お伺いしたいのですが、Win版Adobi Illustrator9.02で
今まで使えていたフォントが、ある日突然別の書体で
表示されるようになってしまいました。
フォント選択メニューの中には確かに元の名前で表示されているのですが、
フォントの選択メニュー内のそのフォントの並びは正常な際の位地から
ずいぶん下の方になってしまいました。ちなみに日本語フォントと
欧文フォントとの境界にあるのと同じラインの下にあります。
以前の状態への直し方を知っている方がおられたら
お教え願えないでしょうか。お願い致します。
27名無しさん@そうだ選挙にいこう:01/12/20 18:32
書く場所を間違えてしまいました。すみません。
28488:01/12/22 01:44
質問させてください。ボタンを押して実行しているマクロをシートで自動更新されてる
日付が1日経過すると自動的に実行させたいのですが現在あるマクロにどういう命令を
付け足せば良いのでしょうか?タスケテ・・・
29仕様書無しさん:01/12/22 02:00
マクロ開始時刻Aを退避、タイマーで定期的に現在時刻Bを退避しつつ
Aと比較する。B−Aが24時間越えていればメインルーチンに入って
タイマーを切る。

というか、
>ボタンを押して実行している
のだから、
>1日経過すると自動的に実行させ
る必要もなかろう。
>>28はマルチポスト

Word,Excel,Access,PPT初心者すれっど
http://pc.2ch.net/test/read.cgi/pcqa/987705919/
31名無しさん@そうだ選挙にいこう:01/12/23 09:53
VBA Projectのパスワードを忘れてしまった場合はどうすれば
いいですか?
どこかにツールとかありますか?
>>31
厨房がいらない知恵を付けるといけないので「あるよ」とだけ言っておく。
33名無しさん@そうだ選挙にいこう :01/12/23 14:14
>>31
素直に、お前が自殺すれば済む事だと思うが。

どうすればいいですか?
どうすればいいですか?
どうすればいいですか?
どうすればいいですか?
どうすればいいですか?
どうすればいいですか?
どうすればいいですか?
どうすればいいですか?
どうすればいいですか?

氏ね。
たしか、タイム風呂敷を被せるか、
タイムマシンでパスワードをかけた時に戻ってメモしてくれば
良かったと思う。
35名無しさん@そうだ選挙にいこう:01/12/23 20:34
>>32
ありがとうございます。
あのあとネットで探してみたらありました。
無事解決しました。
36名無しさん@そうだ選挙にいこう:02/01/23 23:25
すいません。マクロってなんですか??
37仕様書無しさん:02/01/24 00:06
 プログラム板でスレ違いだからここへ来いと言われて
やってきました。エクセルのVBAをパスワードで保護
しているのをぶっ壊すツールはどこかにありますか?
 あったら教えてください。
38仕様書無しさん:02/01/24 00:08
よろしくお願いします。
39名無しさん@そうだ選挙にいこう:02/01/24 01:10
>37,38
こっちも板違い。
苦楽は初級ネット板へ逝け!
40名無しさん@そうだ選挙にいこう:02/01/24 04:33
removepasswordっていうマクロどこにありますか?
41名無しさん@そうだ選挙にいこう :02/01/25 01:38
「VBA」ってヴァカ馬鹿アホの意味?
42 :02/02/06 22:53
プログラム板がら来ました。
エクセルでデータを入力してるのですが、
     A  B  C
1列目 a  b  c
2列目 d  e  f
3列目 g  h  i
)以下続く。

と書いてある内容の1つのファイルから
a_b_c.txt d_e_f.txt g_h_i.txt・・・ というように列ごとに
テキストファイルを書き出すことはできますか?
マクロって何?という状態なのでよく分からんのです。
教えて君でスマソ

43名無しさん@そうだ選挙にいこう:02/02/07 18:34
>42
できる。OPENステートメントとか。
44 :02/02/07 23:31
45名無しさん@そうだ選挙にいこう:02/05/13 09:46
僕のofficeにはVisual Basic が入っていません。泣
46名無しさん@そうだ選挙にいこう:02/05/13 22:12
>>45
Microsoftへお布施しなさい(泣)
>45

つーか、誰の office にも Visual Basic は入ってない
48名無しさん:02/05/22 23:48
えとですね、
Dim p(100),p2(100)
49名無しさん@そうだ選挙にいこう:02/05/31 13:46
age
50名無しさん@そうだ選挙にいこう:02/05/31 14:29
Rangeなんですけど
Cells(),Cells()で済ませれるときはいいけど
そうでないとき(G2)とかが必要なとき
いちいち

列が1 変数 = A
2    変数 = B
 ・
 ・
 ・

ってやってるんですけど
効率いい方法ないですか?
51名無しさん@そうだ選挙にいこう:02/05/31 14:38
=SUM('4月'!M16)という式が、B3に入ってたとして、
これをB4にドラッグし、=SUM('5月'!M16)にしたいのですが
=SUM('4月'!M17)になってしまいます。
なにかよい方法はないでしょうか?


他の床にもかいたけど、スマソ
52名無しさん@そうだ選挙にいこう:02/05/31 15:13
VBAで、データが入力されてる一番最後の列の場所を取得したいんですけど
ActiveCell.SpecialCells(どこか).Column
を使ってやってるんだけど
セルを削除した後だったり、途中に空白があったりすると
うまく取得できないことがよくあります

間違いなく取得できる方法ないでしょうか
53名無しさん@そうだ選挙にいこう:02/05/31 15:26
すみたせん 質問です。
エクセルファイルがエクセルで起動されたかIEで起動されか判定する方法はありますか?関数でもあるのでしょうか?宜しくお願いします
>>50

Sub aa()
 MsgBox Range(Cells(1, 1), Cells(5, 5)).Address(0, 0)
 For i = 65 To 90
   ActiveSheet.Range(Chr(i) & "1") = Chr(i) & 1
 Next i
End Sub
>>52

Sub bb()
 With ActiveCell
  MsgBox Cells(ActiveCell.Row, 256).End(xlToLeft).Column
  MsgBox Range(Cells(.Row, Cells(.Row, 256). _
                  End(xlToLeft).Column)).Address(0, 0)
 End With
End Sub
>>51

=SUM(INDIRECT("'"&ROW(B3)+1&"月'!N16"))
5756:02/05/31 20:54
>>56

N16 → M16
=SUM(INDIRECT("'"&ROW(B3)+1&"月'!M16"))
58名無しさん@そうだ選挙にいこう:02/06/12 11:53
マクロを警告なしに開きたいので
署名をつけたいんだけど
どうするんでしょう?

HELPにも無いし、調べてもメールについてばかりHITしてしまいます
>>58
HELP>キーワード>「デジタル署名」
60名無しさん@そうだ選挙にいこう:02/06/13 16:59
「日付」,「時刻」の列があるので、MONTH関数とCOUNTIF関数で月ごと(1〜12)の
件数を出力していたのですが、同じ月でもさらに時間帯ごと(0〜23)の件数まで見ら
れるような表を出力したいのですが、COUNTIF関数では無理でしょうか?
61ぱーでんねん:02/06/13 17:34
すみません
ちょっと教えて下さい

1ページ目に空白の宛名と空白の持ち株数を入れる枠があります。
2ページ目に名前の一覧と持ち株数一覧があります。

この一覧表を1ページ目の空欄に順番に挿入しながら印刷は出来ますでしょうか。
200枚以上になりますので手で打ち返るにはちょっと厳しいです。

アクセスのレポートなどでは株数からの金額計算(税金など)が出来ませんので困ってます。

宜しくお願いします。
>>61

一番簡単なのは、ワードを使って差込印刷
63ぱーでんねん:02/06/13 22:38
>>62
返事ありがとうございます。

ワードをメインに使って、計算部分はどうすればいいのですか?
計算式の部分も丸ごと差し込むって事ですか。
宛名の部分と金額のところは離れているのです。
6462:02/06/14 00:56
65ぱーでんねん:02/06/14 01:14
>>64
よーく わかりました。ありがとうございます。

もうひとつ聞きたいのですが、これだと宛名と持ち株数は入りますが、
持ち株に応じての配当金の支払額が計算できません。
(できないというより、関数は貼り付けられないですよね。)

出来ればEXCEL同士で差込印刷みたいな機能はないでしょうか?

すみません。ケチをつけているわけではないのです。
あらためてよろしくお願いします。
66名無しさん@そうだ選挙にいこう:02/06/14 02:37
>>65
えとね、Excelでもね、Accessでもね、最初にあなたのゆってる計算を
するふぃーるど(むずかしい?「れつ」のことよ。)をつくっておいて
それをさしこむだけだとおもうの。なんでわーどにかんすうをさしこもう
としてるの?おとこのこはなんでもさしこみたいの?
あくせすでけいさんができなくて困ってるっていみわかんないの。
けいさんするためのソフトだよ?

わーどにさしこむふぃーるど(むずかしい?「れつ」のことね。あらやだ
にかいめだったね。えへ)も、きちんと「みだし」をつけておけばどの
ふぃーるどをさしこむかをわーどでしていできるよね。しょうかいして
もらった機能をちゃんとつかってから質問してるの?
ばかなのはべつにいいけど、ちゃんと調べるきがないならかえれこのちんこやろう。
6762:02/06/14 06:46
>>65

>66の言うとおり。

氏名  株数  項目1 項目2 項目3 合計

の氏名と株数を合計を差し込むの。

ここはExcelのVBAスレなので、VBAでの実現方法を
教えても良いけど、「アクセスで合計計算が出来ない」
「差し込み印刷じゃワードに関数が入れられない」って
言っているやつに解かるとは到底思えないが。

Worksheets("Sheet1").Activate
for i = 2 to 100
 Worksheets("Sheet1").Range("A1") = Worksheets("Sheet2").Range("A" & i)
 ActiveSheet.PrintOut
next i

見たいな事をやれば良いだけ。
VBAとはヴァカがボケかますApplicationです。
69名無しさん@そうだ選挙にいこう:02/06/14 10:22
>>66
>>67

丁寧なお返事ありがとうございました。
さっそくためしてみます。
70Inputbox:02/06/14 12:42
Inputboxについて質問ですが、ボタンがOKとキャンセルってありますよね?
通常は、キャンセルボタンを押されたら空白が返されるみたいですが、
キャンセルを押された時にある命令を実行させたい時、どのようにコードを記述
すればよいのでしょうか?
(例えば、「終わります」とメッセージを表示してプログラムを終了させるなど)
どなたか教えていただけませんか?お願いします。
71名無しさん@そうだ選挙にいこう:02/06/14 13:49
If InputBox("シャチョサン・・・") = "" Then MsgBox "アウ、キャンセルカ。チェンジスルカ。": Exit Sub
72Inputbox:02/06/14 15:08
>>71
回答有り難うございました。
参考にさせていただきます。
73月見の銀次 ◆Lbs/YhoA :02/06/28 09:12
>>70


excel95 VERでs、以降のバージョンとかではしりませんが・・・
基本的にそう変わらないのでは?
ま、あとはヘルプ見れば大体わかるはず


WKIRAINO = "DUMMY"
Do While Len(WKIRAINO) <> 8
WKIRAINO = Application.InputBox("納入依頼NO(8桁)を入力してください。" & _
Chr(13) & "【例:00890001】" & Chr(13) & _
"終了時 END 又は end", "伝票NO読取")



Select Case WKIRAINO

Case False
’キャンセルのときやりたいこと記述しる
Exit Sub’この場合、処理中断

End Select

74名無しさん@そうだ選挙にいこう:02/07/01 21:19
ActiveSheet.Move でシートの内容をまるまる新しいBookに書き出すと、
もともとのシートで設定していた入力規則(リスト)が出なくなってしまうのはなぜでしょう?
新しいBookでも入力規則の設定はちゃんとされているのに、リストだけでなくなってしまいます。ちゃんとリストを生かしたまま新しいBookに書き出す方法ってないでしょうか?
当方、Excel 2000 for Windowsです。自分のExcelがおかしくなってるのかと思って、書き出したファイルをExcel X for Macでも開いてみましたが、まったく同じでした。
7574:02/07/01 21:37
すいません、簡単なサンプルを作って試したところ、
そちらでは問題なく入力規則(リスト)が生きたまま新しいブックができました。
というわけで、より謎が深まってしまいました。うーん。
7674:02/07/01 21:46
ブレークポイントをつけて調べてみました。

ActiveSheet.Move
'この時点(Book1.xls)では問題なし

ActiveSheet.SaveAs Filename:=CurDir & "\" & myNewSheetName
'ここで名前をつけて保存したら、入力規則(リスト)がおかしくなる

というわけで、SaveAsメソッドあたりを調べてみます。うーん。
>>76
VBのSaveAsにバグがあるという話をどこかで見たような・・・。
ソースが思い出せないのではっきりとは言えないけど。
78名無しさん@そうだ選挙にいこう:02/07/01 23:50
>>77
オレもどっかで見たよ。MSDNで検索すればでるんじゃないか?
79 :02/07/03 16:59
質問です。
ユーザーフォームに数値入力のためのtextboxを複数作りました。
そのtextboxに入力された数値を一括消去したいのですが、
textbox1=""
textbox2=""
のように個々ではなく、一括消去したいのですが
どのようにしたらよいのでしょうか?
>>79
>>79のやり方しかないのでわ?
>>80

ソウデモナイヨ
>>79

Private Sub CommandButton1_Click()
Dim tBox As Control
For Each tBox In UserForm1.Controls
 If tBox.Name Like "TextBox*" Then
   UserForm1.Controls(tBox.Name).Text = ""
 End If
Next tBox
End Sub
83名無しさん@そうだ選挙にいこう:02/07/15 01:38
エクセルで整理したデータ(シートの一部)を、既に用意してあるワード
のテンプレートの任意の部分に飛ばすマクロはないでしょうか

仕事で主に使うのがエクセルなのに、報告書の様式がワードでメンドクサイ
なぁとつねづね思っています。

よろしくおながいします。
>>83

ただの差し込み印刷じゃぁ
8583:02/07/17 23:41
>>84
感動しますた。勉強して出直します。。・゚・(ノД`)・゚・。
86名無しさん@そうだ選挙にいこう:02/07/21 00:15
エクセルでローカルIPアドレスを取得する方法ってありますか?
87名無しさん@そうだ選挙にいこう:02/07/21 00:54
ない
つーか、マルチうざ。
89名無しさん@そうだ選挙にいこう:02/07/22 01:17
age
プロパティの表示などに使われているフォントを変えたいんだけど、
どうすればいいの?
91名無しさん@そうだ選挙にいこう:02/07/26 10:55

Excel2000のVBAで質問です。
これまでは新規に用意したブックにデータを貼り付け
A% = Application.Dialogs(xlDialogSaveAs).Show(S_name, 3)
でTab区切りテキストファイルに書き出していた処理があるのですが、
「遅いんじゃゴルァヽ(`Д´)ノ」&「毎回違うファイル名にするとファイルが雑多にな
るYO!」
と要望が出まして、
「ユーザーに選択させたファイル(存在しなければ新規)の末尾に追加で書き込む」
という方法をとることになりました。
既存ファイルに追加するのはOpen 〜 For Output As とか使えば
いけると思うのですが、
「ユーザーにファイルを選択させ(セーブや削除をせずに)、そのファイル名を得る」
方法がわかりません。
ヘルプでApplication.Dialogsの引数を見ても一覧だけでどれがファイル選択に該当
するのか
わからなくて…。・゜・(ノД`)・゜・。

どなたかご教授御願いします。


92名無しさん@そうだ選挙にいこう:02/07/26 11:43
>>91
Dim myPath As String
myPath = Application.GetOpenFilename("Microsoft Excel ブック (*.xls), *.xls")

みたいにすればダイアログボックスでExcelブックのファイル名が選べると思うよ。
これだけではファイルを開くこともセーブや削除もされない。
93名無しさん@そうだ選挙にいこう:02/07/28 05:52
データを取得してくるたびに時間を取りたいんですが、
どのようにすればよいでしょうか?
どなたか教えて下さい。お願いします
>>93
Timeステートメントじゃダメなの?
95名無しさん@そうだ選挙にいこう:02/08/02 21:21
Excel VBA 厨房です。ム板からの紹介で来ました。

エラー処理にひっかかったら Excel を落とすってことで、Application.Quit
を使おうとしてます。以下のようなプログラムなんですけど、

なんちゃら
かんちゃら
if エラー発生 then
  MsgBox("baka")
  Application.Quit
end if
処理1
処理2
 :

MsgBox が表示されて、Application.Quit が実行されても Excel が止まらずに
処理1、処理2が実行されてしまいます。

Application.Quit って C で言う exit() みたいな使い方できないんですか?
何せVBは厨房なので恥ずかしい質問ですが、教えてくださると助かります。
96通りすがりの。。。:02/08/02 23:33
>>95
If エラー発生 Then
MsgBox ("baka")
Application.Quit
Exit Sub
End If
処理1
処理2

ってすればたぶん大丈夫と思います。
Application.Quitって、関数が終わってから利くみたいで、無理矢理関数
を終わらせれば思い通り動くのでは。。。
この辺は、M$さんのヘルプっていい加減!?
>>95

Sub Baka()
Dim result
 result = Application.InputBox("数値以外いれんなよ!", "ゴラァ")
 If Not IsNumeric(result) Then GoTo ERR:
  MsgBox "素直やな。。", vbInformation + vbOKOnly, "V(^0^)"
 Exit Sub
ERR:
 MsgBox "なめとんのか?", vbCritical + vbOKOnly, "オラァ"
 ThisWorkbook.Saved = True
 Application.Quit
End Sub
98名無しさん@そうだ選挙にいこう:02/08/03 09:38
>>96 >>97
回答有り難うございます。試してみました。

Sub Parent()
  Call Child()
  処理1
  処理2
End Sub

Sub Child()
  If エラー発生 then
    MsgBox "baka"
    Application.Quit
    Exit Sub
  End If
End Sub

という具合のコードだと、Child() を抜けた後に処理1、処理2が動いちゃいますね。
しょうがないんで運用でカバーします。

…だからVBって嫌い。
99名無しさん@そうだ選挙にいこう :02/08/03 10:08
>>98
おまえバカ?
100名無しさん@そうだ選挙にいこう:02/08/03 10:17
>>98
Err.Raiseで終わるのはダメなの?
>>98

Sub Parent()
If Child Then
    処理1
    処理2
Else
    MsgBox "お前が馬鹿"
    ThisWorkbook.Saved = True
    Application.Quit
End If
End Sub

Function Child() As Boolean
Child = True

  処理3

 If エラー発生 Then Child = False
End Function
>>99
そうですが、何か?

>>100
うーん、ちょっとダメですね。

>>101
このようにソースを書き換えてる最中です。運用でカバーというのはちょっと表現が
ナニでしたね。
103名無しさん@そうだ選挙にいこう:02/08/03 17:03
>>102
ソース書き換えるのを運用でカバーと言ってしまう。
ちょっとどころじゃねーだろハゲ!
バカ丸出し
104名無しさん@そうだ選挙にいこう:02/08/03 17:47
おやじ?
>>103
そういう意味だったのか...
106名無しさん@そうだ選挙にいこう:02/08/03 18:56
Excel 97/2000 のVBAで教えてください。
UserForm でリストボックスを使っています。
Form1.ListBox1.AddItem (str)
で文字列を1行ずつ追加しているのですが、日本語文字の一番下が欠けてしまいます。
(英数文字は欠けません)リストボックスの行間隔がどうも狭いようです。
フォントはMSゴシック/Pゴシック、Terminalといろいろとサイズも変えて確かめて
みたのですが、症状は変わりません。何かプロパティの設定が足りないのでしょうか。
あるいは、リストボックス行間隔を調整する方法があるのでしょうか。
107名無しさん@そうだ選挙にいこう:02/08/03 20:10
質問です。

未登録のCOMサーバをイベント付きで使うにはどのようにすればよいのでしょうか?
未登録にこだわるのは、配布を楽にしたいからです。

よろしくお願いします。
>106

ソースをかけや。

Column が複数設定されているとかは?
>>108
レスありがとうございます。
フォームの中に、リストボックス(ListBox1)を配置しただけで、配置座標以外は
プロパティには触ってない状態で試してみました。

Private Sub UserForm_Activate()
ListBox1.AddItem ("年月日×")
ListBox1.AddItem ("年月日÷")
ListBox1.AddItem ("年月日△")
ListBox1.AddItem ("年月日ABC")
End Sub

文字列の中に×や÷が入っていると、下方向にずれて一番下のラインが欠けて
しまうようです。(上の例だと、一つ目と二つ目の文字列が欠けてしまいます)
>>109

ああ、ほんとだ、文字の下が欠けるね。

ComboBoxでやると、文字の上余白が通常より大きくなっているのがわかるね。
バグかな?斜体にすると入ることは入るけど。
>>109
明朝なら欠けないよ、ゴシックはダメよ
>>110 >>111
ありがとうございます。

斜体にすると、「日」の下の横線は見えるうになりましたが、私の環境
(Windows 2000+Excel2000,Windows Me + Excel97)では依然として
1ピクセル分ずれているようです(標準の状態だと2ピクセルずれていたの
かな?)
明朝にしてみると、例えば「日」だと下の出っ張りがあるはずなのですが
これが欠けてしまっています。

文字の下が欠けても重大事には至らない用途なので、明朝か斜体にして、
とりあえずOKとすることにします。でも、なんかおかしい挙動ですね。
113(;´Д`):02/08/06 19:52
VBA初心者です、どなたか教えて下さい
マニユアル見ながらマクロを作っているのですがうまくいきません

Book1というファイルを開いた状態から0001というファイルを開いて
0001ファイルのセルHF10にあるデータをクリップボードを経由しないで
Book1ファイルのセルA10にコピーしたいのですが下のマクロだと
エラーがでます。どこが間違っているのでしょうか?


Sub Macro1()

Workbooks.Open FileName:="D:\BD\0001.xls"
Application.Goto Reference:="R10C214"
ActiveCell.Range("A1").CurrentRegion.Select
Selection.Copy _
Destination:=Workbooks("Book1").Worksheets("sheet1").Range("A10")


End Sub

の中でこの辺りが間違っているみたいなんですが
Selection.Copy _
Destination:=Workbooks("Book1").Worksheets("sheet1").Range("A10")
114名無しさん@そうだ選挙にいこう:02/08/06 21:41
どんなエラーか知りませんが。

Sub Macro1()
  Dim c As Range
  '実行時表示しているシートのセルA10
  Set c = ActiveSheet.Range("A10")
  Workbooks.Open FileName:="D:\BD\0001.xls"
  '開いたブックの左端のシートのセルHF10
  ActiveWorkbook.Worksheets(1).Range("HF10").Copy Destination:= c
  '
  Set c = Nothing
End Sub
115名無しさん@そうだ選挙にいこう:02/08/06 22:15
質問です。

EXCELから直接リモートのDB2にクエリーを発行し直接結果をシートに張りたいのです。
どなたかご教授ください。

よろしくお願いします。
116(;´Д`):02/08/06 22:26
>>114
作っていただいたマクロを元に下の様にして
やって見たところ、うまくいきました

Dim c As Range
Set c = ActiveSheet.Range("A10")
Workbooks.Open FileName:="D:\BD\0001.xls"
Application.Goto Reference:="R10C214"
ActiveCell.Range("A1").CurrentRegion.Select
Selection.Copy Destination:=c
'
Set c = Nothing

助かりました!本当にありがとうございました
117名無しさん@そうだ選挙にいこう:02/08/06 22:39
excelでCtr+Shift+:(* ヶ)を押すと表全て(罫線全て)が選択されますよね?

これをVBAで実現するとどのようなコードになるのでしょうか?
いくつかある数字のトップ10以内に入っているかいないかを
判定するには
ソートマクロ→上位10番目と比較したif関数
とやるしかないんでしょうか?
便利なやり方・関数をご存知でしたらご教授ください
>>117

ActiveCell.CurrentRegion.Select
>>118

これはVBAの質問なのか?

RANK関数と違うのか?
121ミトボ:02/08/07 17:48
エクセスでVBAを使ってまだ2週間なのですが、次のバージョンで使えなくなるって本当ですか?
>>121
<エクセス>の次バージョンはあなたが死んでから発売しますので
安心してそのまま現バージョンをお使いください。
123名無しさん@そうだ選挙にいこう:02/08/07 20:54
なに?もしかしてVBA.NETにでもなるのか?マジレスキボンヌ
標準でVBA使えないEXCELなんて誰も使わないから、ありえないんじゃない?
125名無しさん@そうだ選挙にいこう:02/08/08 16:06
あのぅ。115ですが私の質問はDQNですか?
ローカルのアクセスデータベースへのアクセスの仕方はいくらでも載っているのですが
リモートのデータベースへ繋ぐ方法がわからないのです。

よろしくお願いします。
126名無しさん@そうだ選挙にいこう:02/08/08 17:19
はじめて書き込むものです。
どなたか教えてください。
給与計算や経理会計の際に、データに間違いや訂正がある場合には、よく
そのセル自体に色づけをしておくと思いますが、
色づけされた隣りのセルに、なんらかの記号がかえるVBAはどうやって
作ればよいのでしょうか?
単なるIF関数での選別はできないと思います。
色も特定の色ではなく、何らかの色がついていればすべてかえるようなものをつくり
たいのです。
こういう場合はパラメータっていうものを使用するんでしょうか?

私は、なんらかの色がついている状態を変数を使ってあらわし、その変数
に対して分岐命令(IF)を使ってやってみようと思ったのですがだめでした。
まったくの初心者ですが
どうかよろしくお願いします。
127名無しさん@そうだ選挙にいこう:02/08/08 17:26
126のものですが、
オブジェクトがパラメータ(任意)の状態っていうものはありえないのでしょうか?
あと、たとえばアクティブシートの特定の列の一番上の行に入っているセルより
上の行をすべて行毎削除するVBAを作ったりする場合は、どうやって
その内容を表記すればよいのでしょうか?
併せてよろしくお願いします。
128名無しさん@そうだ選挙にいこう:02/08/08 18:00
まったくの初心者に教えるのは本気でメンドクセーので
どっかで勉強してから自分なりに考えたコードを載せて下さい。
129名無しさん@そうだ選挙にいこう:02/08/08 18:05
定型シート入力フロントエンドのようなものを作ろうと思っています。

定型入力に必要のないメニューやボタンを削除したいのですが、

1.現在のメニューやツールバーの状態を保存
2.必要最低限(印刷等)だけのメニュー、ツールバーを表示
3.入力
4.終了
5.メニュー等の状態を復帰
6.EXCELの終了

と言う動作を実現したいのですが、独自メニューの作成方法はわかったので
すが、それをユーザー設定のものと置き換え、終了時に復帰させる方法がわ
かりません。

どなたか教えていただけないでしょうか?
130名無しさん@そうだ選挙にいこう:02/08/08 18:06
>>125
何つかってローカルにつないでるの?
リモートも基本的には接続文字列にDSNが理解できるサーバ名を
入れるか直接IPアドレスで繋げるよ。検索してみ
http://www.google.co.jp/search?q=db2+connectionstring+ado&ie=UTF-8&oe=UTF-8&hl=ja&lr=
131_:02/08/08 18:07
次のOfficeもVBAなのかな
VBが変わったみたくVBAも変わっちゃうのかな
132名無しさん@そうだ選挙にいこう:02/08/09 01:33
VBAってなんて読むんですか?
ビバでいいんですか。
133名無しさん@そうだ選挙にいこう:02/08/09 04:31
ヴィバ
134名無しさん@そうだ選挙にいこう:02/08/09 14:38
>>128
126ですが、具体的なコードを載せてみました。

Sub 着色セル判別()
Worksheets("sheet2").Select
If Range("a1").Interior.ColorIndex = 6 Then
Range("b1") = "合格"
Else
Range("b1") = "不合格"
End If
End Sub

これだと、黄色のセルの場合のみ、合格が表示されます。
私が構築したいのは”なんらかの色がついているセルがある場合、合格の文字
がかえる”といったものです。

初心者として捉えなくても構いませんので
もし、やり方をご存知でしたら教えていただけませんでしょうか?
どんな形のネタでも結構ですので・・・・。


よろしくお願いします。
135g:02/08/09 14:47
-------風俗の総合商社・MTTどこでも-------

〇デリバリーヘルス〇デートクラブ〇女性専用ホストクラブ〇
〇ハードSM奴隷クラブ〇レズビアン倶楽部〇ホモ・オカマ倶楽部
〇変態痴女と遊ぶ会〇痴漢・覗き趣味の会〇変態同好会・各種!
●楽しく遊べます! 090-8002-8356番
-----------美男・美女会員など多数在籍中-----------
  http://www.mttdocomo.jp/
-----女性アルバイト随時募集・高収入(日払い)月100万円可能住み込みも可
-----レズビアン・スタッフ●ホモスタッフ●女性専用ホストスタッフ同募-----
http://www.mttdocomo.jp/
------------------------------------------------
136名無しさん@そうだ選挙にいこう:02/08/09 14:54
>>134
初心者じゃ教えてもらえなきゃ「初心者じゃない」かよ。
馬鹿?社会生活大丈夫?経理におしこめられててよかったよほんと。

「色がついていない」場合の判断はInterior.ColorIndex = xlColorIndexNone
もう来ないでくれ。バイバイ。
137名無しさん@そうだ選挙にいこう:02/08/09 18:31
>>136
お答えありがとうございました。

ちなみに
初心者として扱った場合、わかり易く説明する手間がかかってしまうから
”128”のような文章を書いてくれたと思ったので、
上級者じゃないとわからないような回答内容でもいいですよって
いう意味で”134”の文章を書いたんです。言葉足らずですみませんでしたが
懲りずにまた教えてください。







138名無しさん@そうだ選挙にいこう:02/08/10 20:13
教えて頂けますか。
エクセルファイルを「打込用」と「請求書用」に分けています。
「打込用」にデータを入力しています。
A      B
001    印刷
・      ・
・      ・
004    印刷 といった感じです。
これを
「請求書用」の方で
「打込用」のB行に「印刷」値がある場合
「請求書用」の「A7」に「打込用」のAの値(001・004・・・)を
入力後印刷をする。次へ・・・
といったものを作成したいのですが。
どうか教えて頂けますか。よろしくお願い致します。
>>138

単純なループ処理だと思うのだが。。

シートを分けてるのではなく、ファイルを分けてるのか?
>139様
はい。そうなんです。
「打込用」「請求書用」共に月別にシートを」分けているもので。
何卒よろしくお願い致します。
141139:02/08/11 00:19
>>140

「請求書用」、「打込用」ブックを開く(この2つのブックのみ開く)

1.「請求書用」ブックにマクロを記入する。
2.「請求書用」の印刷したいシートをアクティブにしておく
3.「打込用」ブックのデータ元シートをアクティブにしておく
4.マクロ実行

Sub Test()
Dim wb As Workbook, wb1 As Workbook, wb2 As Workbook
Dim myRange As Range, r As Range

 For Each wb In Workbooks
  If wb Is ThisWorkbook Then
    Set wb1 = wb
  Else
    Set wb2 = wb
    Exit For
  End If
 Next wb

 If wb2 Is Nothing Then Exit Sub

 Set myRange = wb2.ActiveSheet.Range("A1:A" & _
    wb2.ActiveSheet.Range("A65536").End(xlUp).Row)

 For Each r In myRange
  If r.Offset(0, 1) = "印刷" Then
    ThisWorkbook.ActiveSheet.Range("A7") = r.Text
    'ActiveSheet.PrintOut
    MsgBox r.Text & ": 印刷"
  End If
 Next r
End Sub
142139:02/08/11 00:22
>>141

訂正

Exit For を削除すれ
>141様
>142様(同じ師匠ですね)
うわ〜〜〜〜ん。早速やってみます。
とっても賢い方でしょうから、
私の質問に対しては時間掛かってないと思いますけど
回答頂いて感謝致します。早速やってみます。
師匠どうもありがとうございました。
勝手に師匠と呼んですいません。そんな気分なもので。。。
144139:02/08/11 11:36
>>143

動作テストもして、10〜15分はかかってるぞ!
情報も少ないからソースも長くなるし、、、

上手くいったのか?
145名無しさん@そうだ選挙にいこう:02/08/11 18:44
複数セルが選択されています。(例 Range("B2:D6"))

この時、左上のセルと右下のセルの絶対位置を数字で求めたいのですが
どのようにすれば求められるでしょうか?

上記の場合には
left=2
right=4
top=2
down=6

みたいに求めたいのです。アドバイスよろしくお願いします。
146名無しさん@そうだ選挙にいこう:02/08/11 18:50
質問です。
Cells(r, 1)とすれば変数をつかいセルを選択する事が出来ますが
複数セルを変数を使って選択するにはどうすれば出決ますか?
Cells(s,1):Cell(t,5) じゃ無理ですよね?
>>146

Sub aho()
Dim i As Long, j As Integer
 i = 1
 j = 1
 ActiveSheet.Range(Cells(i, j), Cells(i + 100, j + 5)).Select
End Sub
>>145

Left?Top?
Rectやな

Sub baka()
Dim r As Range

 Set r = Selection
 If r.Areas.Count = 1 Then
  MsgBox "Left:" & r.Column
  MsgBox "Right:" & r.Columns.Count + r.Column - 1
  MsgBox "Top:" & r.Row
  MsgBox "down:" & r.Rows.Count + r.Row - 1
 Else
  MsgBox "複数範囲は知らん!"
 End If
End Sub
>>145
別解
Sub baka2()
 If TypeName(Selection) <> "Range" Then _
  MsgBox "セルを選択しる!": Exit Sub
With Selection
  If .Areas.Count = 1 Then
   MsgBox "Left:" & .Cells(1).Column
   MsgBox "Right:" & .Cells(.Count).Column
   MsgBox "Top:" & .Cells(1).Row
   MsgBox "Bottom:" & .Cells(.Count).Row
  Else
   MsgBox "複数範囲は知らん!"
  End If
 End With
End Sub
150名無しさん@そうだ選挙にいこう:02/08/11 23:36
vba でC言語のCONTINUEに当たるステートメントってありますか?

FORループをうまく制御できなくて困っています。
みなさん、優しいレスをありがとうございました。
152名無しさん@お腹いっぱい。:02/08/11 23:55
>>150
Ifで条件分岐してみては?

For I = 1 to 10
'奇数のときだけ加算
 If I mod 2 = 1 Then
  J = J + I
End If
Next
MsgBox J
153名無しさん@そうだ選挙にいこう:02/08/12 10:58
>>56
国歌や国旗が好きなやつらはちょっと否定しただけで反日扱いするな(笑)
これじゃ世間的に危ないやつと思われてもしょうがないな。

まあハングル板は右翼の集まりだから何言ってもしょうがないがな。(笑)
154コギャルとHな出会い:02/08/12 11:02
http://kado7.ug.to/net/


朝までから騒ぎ!!
   小中高生
 コギャル〜熟女まで
   メル友
  i/j/PC/対応

女性の子もたくさん来てね
  小中高生大歓迎です                 
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。

  激安携帯情報あります。
155 :02/08/12 11:40
EXCELでOEのアドレス欄に登録されている方たちに
一斉送信したいのですが、どのような方法を使えばいいでしょうか?
156名無し:02/08/12 17:54
すみません、エクセルなんですが。
時間の計算です。13時00分を超えたら−30分し
13時00分を超えなければそのままの時間を表示したいのですが
  =IF(A1>="13:00",A1-"0:30",A1)
A1に12:00と入力するとそのまま12:00となりますが
13:00以降の数字を入力してもそのままの値が表示され
−30分されません。式が間違ってるのだと思いますが、これ以上思いつきません
知ってる方教えてくださいお願いします。
>>156

激しく板違いだな

=IF(A1>TIMEVALUE("13:00"),A1-"0:30",A1)
158名無し:02/08/12 21:27
>>156
板違いスマソ
でも禿しくthx
159名無しさん@そうだ選挙にいこう:02/08/15 14:05
非常に簡単なことで申し訳ありません。

エクセルで(埼玉県)、(東京都)、(神奈川県)などとセルに入っています。
この()を外して、埼玉県、東京都、神奈川県と表示させたいのですが、どうすればいよいのでしょうか?
置換でやってみましたが、どうもうまくいかずに困ってます・・・。
160コギャルとHな出会い:02/08/15 14:12
http://kado7.ug.to/net/


朝までから騒ぎ!!
   小中高生
 コギャル〜熟女まで
   メル友
  i/j/PC/対応

女性の子もたくさん来てね
  小中高生大歓迎です                 
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。

  激安携帯情報あります。

ヒョデーイ!!!
http://2style.net/maido/R3_temp.swf?inputStr=%83q%83%87%83f%81%5B%83C%81I%81I%81I%81I

#音量ONにして飛んでね(・∀・)イイ!

参考スレッド 森恒二ホーリーランド拳闘暗黒伝セスタス技来静也4
http://comic.2ch.net/test/read.cgi/comic/1025843878/551-611

162名無しさん@そうだ選挙にいこう:02/08/15 14:50
痴漢したらどうなるのら?
163名無しさん@そうだ選挙にいこう:02/08/15 17:51
>>159
括弧の位置が決まっているならVBA使うほどでもない。
A1に(埼玉県)とか入っているなら
=LEFT(RIGHT(A1,LEN(A1)-1),LEN(A1)-2)
こっちの方がすっきり。スレ違いスマソ。
=MID(A1,2,LEN(A1)-2)
165名無しさん@そうだ選挙にいこう:02/08/16 15:16
>>163-164
亀レスですがありがとうございました。
そうですね、VBAを使うほどではないようですね・・・。
勉強不足でした。
166VBAの質問:02/08/16 23:12
現在開いている任意のテキストファイルを
エクセルに貼り付けることはできないですかね?
(テキストファイル名を入力させないで)

意味不明だったらごめんなたい。
167初心者より:02/08/17 20:17
ExcelVBAで困ったときの5箇条
1.何がわかっていないかを整理する
2.勝手にできないと決め付けていないか確認する
3.マクロを参考にしてみる
4.ヘルプを徹底的に調べる
5.人に聞くときはやりたいこと、考えたこと、解ったこと、解らないところをはっきりする
これだけでずいぶん違うと思うんだけどなあ
168サービスマン:02/08/19 22:07
ExcelVBAでユーザーフォームを作成しました。
このユーザーフォームにテキストボックスを配置したのですが
書式プロパティ(数値の少数点以下桁数を設定したい)はありますか?
textboxのプロパティに設定項目が見当たりません。
お願いします。
>168

テキストボックスはその名の通り、テキストを扱うボックスです。

TextBox1.Text = Format("123.456", "#,##0.00")
170サービスマン:02/08/19 22:27
ありがとうございます。
プロパティでデフォルト設定するのではなく
コードで記述するのですね。
171名無しさん@そうだ選挙にいこう:02/08/20 12:00
Excelコーディング初心者です。
会社の端末にExcelしかないもので、ExcelをAccessみたいな使い方をしています。
単表形式の帳票を出さなくてはいけなくて、

1枚目の「印刷」シートは、Accessのレポートのように線だけ引いていて、
2枚目の「データ」シートは、Accessのテーブルのようにデータを貯めています。

この「データ」を1件ずつモジュールで「印刷」シートに貼り付けて印刷を
行っているのですが、面倒なので1件ずつでなくループでもって
貼り付け→印刷→貼り付け→印刷→貼り付け→・・・
と行うと、端末スペックが貧弱なせいで、途中でハングしてしまいます。

通常、Excelモジュールで、連続して印刷を行う時は、どういう処理をするのかを
教えて欲しいのです。自分で思いつくのは上記の方法以外に
「印刷」シートをコピー増やす→データを貼り付け→コピーして増やす→・・・→
多数シートを連続して印刷
という方法くらいです。よろしくおながいします。
>>171
Wordの差込印刷を使うか、VBAを組むのどちらか。
はっきり逝って、Wordの差込印刷の方が全然簡単だと思う。

173172補足:02/08/20 13:03
どうしても、VBAでやりたいのならコードが汚くなるが、
次の方法でやるのがいいと思う。
まず、マクロで記録をして、1行目のデータをコピぺし、印刷する。
次に、VBAを開いてModule1のMacro1に
Sub Macro1()
Dim i as integer  ←加える(別にいらないが…)         
For i=1 To 00 
        ↑データの最後の行番号をかけ。確か取得できる関数が
         あるはずだが、忘れた。
       
  '元々書いてあったコードをそのままのせる。
  'ただし、Range("A0").Copy という感じのコードがあるはずなので
  'それをRange("A" & i)に書き換える。
 
 Next i ←加える
End Sub
と、まぁ、こんな感じでやるのだが……
174171:02/08/20 15:32
>>172-173
どうもです。言葉足らずで申し訳ないっす。

ええと、>>171に書いた、ループなどのコーディングは出来上がっているのですが、
どういう「手法」でループして「印刷」シートに差し込んでいくのがExcelで、
もっとも端末に付加をかけずに行えるかが知りたかったのです。

Excelは表などの線を書くのは簡単で良いのですが、
差し込んで印刷→差し込んで印刷→・・・
というループには向いていないようで、すごく緩慢になってます。
Accessがほしいです。
>>174
実際には負荷がどうかかっているかよくわからんが、俺の経験上だと
コピペ文を代入式に変形させれば少しは良いんじゃないかと…
sheet1.Range("A1").Copy
sheet2.Range("B1").Paste
      ↓
sheet2.Range("B1").Value=sheet1.Range("A1").Value
という感じにすれば、クリップボードにデータが残らないと思う。
あとは、実行画面を表示させないことかな……
176171:02/08/20 17:08
>>175
ありがとです。それらは双方ともやっていました。
貼り付けという表現がだめでしたね。申し訳ないっす。

ということは「手法」として
{貼り付け→印刷}×α
は間違っていなかったわけですね。

ありがとうございました。
177名無しさん@そうだ選挙にいこう:02/08/20 19:40
オラクルとSQLどっちが最高?
178名無しさん@そうだ選挙にいこう:02/08/20 19:57
ハァ?
>>171

どんなヘタレ環境か知らんが、多分ソースが悪い。
どんなソースか、うpしてみ。
180171:02/08/20 22:11
>>179
恥ずかしいので結構です。遠慮します。

あれから、いろいろ考えて、1枚の「印刷」シートに枠線を縦方向に多数コピーし、
間隔見計らって、データの差し込み→印刷を行う方法を発見し、
ハングせずに印刷できるようになりました。

以前の方法ですと、印刷時に
「1/1枚印刷しますた」→「1/1枚印刷しますた」→・・・
と何度も出ていたのが、今度の方法だと、
「○/25枚印刷しますた」
と一回の表示で行えるようになったのがデカいようです。

もしかすると、印刷のループがいけなかったのかもしれません。
とか、言ってみるテスト(と言って逃避)。
アクティブセルが指定範囲内かの
チェックを入れたいのでが
どうやってチェックするのでしょうか?

アクティブセル A1
指定範囲    A1:D50
【範囲内】

アクティブセル B70
指定範囲    A1:D50
【範囲外】

お願いします
>>181
Intersectは範囲のかぶってる部分を返すメソッド

Sub Macro1()
  Dim c As Range
  Set c = Application.Intersect(ActiveSheet.Range("A1:D50"), ActiveCell)
  If c Is Nothing Then
    MsgBox "かぶりなし", vbInformation, ActiveCell.Address
  Else
    MsgBox "かぶってる", vbInformation, ActiveCell.Address
  End If
  Set c = Nothing
End Sub
Intersect メソッド
を本(最新2冊)で調べたのですが載っていく
オブジェクトブラウザではありました。

こんなメソッドがあるのですね。
勉強になりました。
大変助かります。ありがとうございました。
184初心者:02/08/21 23:05
すみませんが、VBAでWAVとかMP3を鳴らすプログラムはくめるでしょうか?
もしかしたらあほな質問をしているかもしれませんが、よろしくお願い申し上げます。
185名無しさん@そうだ選挙にいこう:02/08/22 00:30
音声でメッセージを出したいんだよね!
俺は知らん!
>>184>>185(w
PLAYSOUND
SoundNoteじゃなかったっけ。
WAVならこれ(API使用)。
ブックを開いたときにWindowsの起動時の音が鳴るよ。

Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Sub Auto_Open()
 sndPlaySound "C:\WINDOWS\MEDIA\The Microsoft Sound.wav", 0
End Sub

MP3はしらない、スマソ。
VBMP3.dll
190名無しさん@そうだ選挙にいこう:02/08/22 21:46
>>141,142
レスしてからの訂正は、チョー恥、オオチャクカマスナ
だけでなく、初心者(質問者)にも間際らし!
その程度で、威張るのformat(100000000)年、早
(゚Д゚)ハァ?
192VBA:02/08/23 23:39
98SEのラップトップですが EXCEL VBA のプロパテイ内のFontが毛筆体に化けています
どうすれば通常Fontにもどるでしょうか?(office 2000)



193名無しさん@そうだ選挙にいこう:02/08/24 00:52
>>192
あっ、それバグ。MSのどっかにパッチあったよ。
場所忘れたので探して
194名無しさん@そうだ選挙にいこう:02/08/24 07:20
プロジェクトにロックをかけててもOpenOffice.Org Calcで開くと
見えました。
しかし一部文字化けするようです。
文字化けしないようには出来ませんか?
エクセルマクロ刈ったでは解除できなかったもので。
195194:02/08/24 08:14
スレ違いスマソ。
196名無しさん@そうだ選挙にいこう:02/08/24 09:27
197196:02/08/24 09:30
これが正解。 一番うしろのxが抜けてた、スマソ
ttp://office.microsoft.com/japan/downloads/2000/O9VBEupd.aspx
198いちゃお:02/08/24 12:34
はじめまして。
ただいま、エクセルと格闘中している者です。
例えば、A列に0〜10までの数値,B列にXまたはZの記号を入力しています。
6未満の数値をカウントしたい場合『=COUNTIF(範囲,">6")』
Aをカウントしたい場合『=COUNTIF(範囲,"X")』
私は、↑上記2つの式を合体させて、”6未満でかつAのアイテム”を
カウントする1つの式を考えたいのですが、情けないですが、
どうしても1つの式に出来ませんでした。出来ると思うのですが…。
すいませんが、どなたかご存知でしたら、お教え頂けると幸いです。
よろしくお願い致します。
>>198

VBAの質問か?激しくスレ違い

Excel総合相談所7
http://pc.2ch.net/test/read.cgi/bsoft/1028725250/l50

ちなみに

=SUMPRODUCT((A1:A11<6)*(B1:B11="X"))
>199
誘導だけでなく答えまで書くなんて199さん(・∀・)カコイイ!!
201名無しさん@そうだ選挙にいこう:02/08/25 06:57
>>198
=SUM((A1:A11<6)*(B1:B11="X"))
と入力してSHIFT + CTRL + ENTER

202いちゃお:02/08/25 09:54
>>199
>>201
ありがとうございました。出来ました。
誤記(>6),板違い等失礼致しました。
203名無しさん@そうだ選挙にいこう:02/08/25 10:16
超初心者ですが,VBAを良く分からないまま扱っていたら,当該エクセルファイルを開くたびに

マクロが どーのこーのって メッセージが出だしました。

どうやったら 出なくできるのでしょうか。

簡単な質問ですみません。(私にとっては,超難問です) 
>>203

シート名のタブを右クリックして、コードの表示
VBE画面が開くので、書いてあるコードを全部消し(全部のシート)、Module1があったら削除する。

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

End Sub

  ↑
 これ

その後保存して、2度とコード表示をしないこと。
205203:02/08/25 12:31
>>204
できましたー!!

ありがとうございました(^o^)

やっほー
206名無しさん@そうだ選挙にいこう:02/08/27 15:14
EXCEL2000を使っています。

VBAからセルの右クリックメニューに追加したメニューを階層化することはできますか?

たとえば、メニューバーから「ファイル」 > 「印刷範囲」を選んでその上にカーソルを合わせると、
サブメニューとして、「印刷範囲の設定」、「印刷範囲のクリア」という二つのメニューがあらわれます。

質問の趣旨は、右クリックメニューからこのようにサブメニューをだすことは可能か、という意味です。

どうやってもできないので困っています。わかる方、お助けください。
>>206
コントロールの種類をちゃんと指定汁

With CommandBars("cell")
.Reset
With .Controls.Add(msoControlPopup)
.Caption = "印刷範囲(&T)"
.BeginGroup = True
With .Controls.Add(msoControlButton)
.Caption = "印刷範囲の設定(&S)"
'.FaceId = 0
'.OnAction = ""
End With
With .Controls.Add(msoControlButton)
.Caption = "印刷範囲のクリア(&C)"
End With
End With
End With
Sub test()
Workbooks("test2.txt").Sheets("COM_OutData").SaveAs Filename:="c:\test3.txt", FileFormat:=xlTextWindows
End Sub
を実行するとエラーになります。

メッセージは
実行時エラー'1004'
アプリケーション定義または、オブジェクト定義のエラーです。

オプションの【FileFormat:=xlTextWindows】をコメントアウトすると
正常に動作します。

環境
OS WIN2K
EXCEL 2002

わかる方。お願いします。
209G:02/08/28 13:41
>>208のつづき
http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/JAPAN/support/kb/articles/JP199/2/68.asp
も関係あるかと思いしらべてみたのですが、特に保護はされていません。
210名無しさん@そうだ選挙にいこう:02/08/28 15:37
デジタル署名の仕方について教えてください。どこかからひっぱてくる?
LANのユーザーです。(マクロセキュリティ中に変更)
エクセルファイルを開き→エディター→デジタル署名→既存のがない
となります。どうすればいいのでしょうか?
管理者でもやってみましたがおなじところでとまりますが・・・。
211206:02/08/28 16:27
207さん、ありがとうございました。別件で忙しくなりまだ試せていないんですが、取り急ぎお礼まで。
212名無しさん@そうだ選挙にいこう:02/08/28 18:14
>>209
xlTextWindowsってことは、日本語エクセルではないのですか?

もし、日本語版ならFileFormatを
xlCurrentPlatformText とか xlCSV 辺りを試してみたらどうでしょう。
213まーぼー:02/08/28 21:14
EXCEL2000を使っています。

マクロが自動的に実行されるようにするには?

 マクロの作成は初心者で、マクロは記録したモノをボタンに登録して
使用するくらいです。
Excelのヘルプを見ていると、以下のような記述がありました。

>自動マクロを実行しないで Excel を起動する。
>Auto_Activate などの自動マクロは、Excel を起動したときに自動的
>に実行されます。 これらのマクロの詳細については、Visual Basic
>のヘルプを参照してください。Excel が起動したときに自動マクロが
>実行されないようにするには、 Shift キーを押しながら Excel を起
>動します。

 とありますが、Excel を起動したときに「マクロ」が自動的に実行さ
れるのではなく、 Excelが既に起動されている状態で「○○○.xls」と
いうファイルを開くとセルポインタが「○○○.xls」の「入力」シート
の「A1」セルに移動するよう下記の様なマクロが実行されるようにする
事は出来ないのでしょうか?(開くファイル自体の「○○○.xls」にマ
クロは記述したいのですが…)

−−開くと自動で実行したいF_OPENマクロ−−
Sub F_OPEN()
Application.Goto Reference:="入力!R1C1"
End Sub
−−−−−−−−−−−−−−−−−−−−−

どなたか御教示の程、宜しくお願いいたします。
214名無しさん@そうだ選挙にいこう:02/08/28 22:55
ブックを開いたときにマクロが実行。

標準Moduleに書く場合
Sub AUTO_OPEN()
  Worksheets("入力").Activate
  Application.Goto Reference:=Range("A1")
End Sub
ブックのイベントコード(Thisworkbook)に書く場合
Private Sub WorkBook_Open()
  Worksheets("入力").Activate
  Application.Goto Reference:=Range("A1")
End Sub
215まーぼー:02/08/28 23:33
あっという間に解決しました!
色々なサイトを検索しても解決できなかったのですが…
たった4行とは…

214「名無しさん@そうだ選挙にいこう」さん有り難うございます。


216206:02/08/28 23:35
207さん、さきほどためしたところうまくいきました。
お返事が遅れましてすみませんでした。

本当に助かりました。ありがとうございました。
217名無しさん@そうだ選挙にいこう:02/08/29 19:00
Excel2000です。
データからグラフを生成し、それを画像ファイル(できればJPEG)として保存するマクロを作っています。
グラフの生成までは出来たのですが画像ファイルとして保存する方法がわかりません。
どなたかよろしくお願いします。
218名無しさん@そうだ選挙にいこう:02/08/29 22:27
質問したいのですが、
EXCELで入力フォームを作っているんですが、
データを入力した後に一番最初のテキストボックスに
自動的にタブが戻ってくるようなマクロは
どのように作ればよろしいでしょうか?
タブの順番を設定しただけではどうしても
入力後にタブが消えてしまいマウスでクリックするか
キーボードのタブキーを押さなければならなくなってしまいます。
検索しても分からなかったので、
検索方法だけでも教えていただければありがたいです。
おねがいします(;´Д`)
219 :02/08/29 23:07
Excel2000です。
21360秒などの長い時間を時分秒にしたいのですがいい方法ありますか?
220名無しさん@そうだ選挙にいこう:02/08/29 23:55
>>217
Exportメソッドを見てみ。
221217:02/08/30 09:31
>>220 神よ!ありがとうございます。おかげさまで出力はできるようになりました。
が、なぜか画像が幅700ピクセルまでで右側が切れてしまうのです。
それとフォントがどう見てもMS Pゴシックには見えないものに変わっていて文字が潰れてしまいます。
これらはどう回避すればよいのでしょうか?一応下にコードを出しておきます。
ちなみに画面表示・印刷は正常です。よろしくお願いします。

'' グラフ作成
With ThisWorkbook
  .Charts.Add , .Sheets(1)
  .ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="グラフ"
  With .Charts("グラフ")
    .Visible = False
    .ChartType = xlLineMarkers
    .SetSourceData Source:=Sheets("TMP").Range("A1:I3"), PlotBy:=xlRows
    .SeriesCollection(1).Name = "=""A"""
    .SeriesCollection(2).Name = "=""B"""
    .HasTitle = True
    .ChartTitle.Characters.Text = "2002"
    .Axes(xlCategory, xlPrimary).HasTitle = False
    .Axes(xlValue, xlPrimary).HasTitle = False
    .HasLegend = False
    .ApplyDataLabels Type:=xlDataLabelsShowNone, LegendKey:=False
    .HasDataTable = True
    .DataTable.ShowLegendKey = True
    With .ChartArea
      .Fill.UserPicture PictureFile:="E:\My Documents\My Pictures\hokkaido.gif"
      .Fill.Visible = True
      .AutoScaleFont = False
      .Font.Name = "MS Pゴシック"
      .Font.FontStyle = "太字"
      .Font.Size = 9
    End With
    .ChartTitle.Font.Size = 16
    .PlotArea.Interior.ColorIndex = xlNone

    With .Axes(xlValue)
      .MinimumScaleIsAuto = 0
      T = #2:00:00 AM#
      Do
        If T > ThisWorkbook.Sheets("TMP").Cells(2, 9).Text Then .MaximumScale = T: Exit Do
        T = T + #12:10:00 AM#
      Loop
      .MinorUnitIsAuto = True
      .MajorUnit = #12:10:00 AM#
    End With
    .Export "graph.jpg", "jpg"
    .Visible = True
    .Activate
  End With
End With
>>218
今ひとつ状況がわからないんだけど、
テキストボックス以外のオブジェクトのTabStopプロパティをFalseにするだけじゃないの?

>>219
Hour(TimeSerial(0, 0, 21360))
Minute(TimeSerial(0, 0, 21360))
Second((TimeSerial(0, 0, 21360))
223名無しさん@そうだ選挙にいこう:02/08/31 01:53
どなたか教えていただけませんか。
excel2000です。
シートへ入力する際、入力するセルの移動をマクロを使って操作するにはどのようにすればよいのでしょうか?
a1へ移動→入力→リターンキーで確定→d1へ移動→入力→リターンー →(繰り返し) →
a2へ移動→入力→リターンキーで確定→d2へ移動→入力→リターンー →(繰り返し)
(以降 ctrl+breakで中断するまで繰り返し)

昔のlotusでは、{?}^というマクロでOKだったと思います。
userformを使った場合、文字列すべて入力する必要があるのに対し、セルに入力する場合、上の行のデータを参照して最初の何文字か入力するだけで候補が表示されるので便利なのです。
(例:「東京都」と入力したい場合、「とう」と入力すれば「東京都」と表示される。)

また、リストボックスを使う場合は、入力する文字列の種類が100種類ぐらいあるので使いにくいのです。

セルの移動だけなら簡単なのですが、入力しながら移動させるのがうまくいかず困ってます。

よろしくお願いします。
224名無しさん@そうだ選挙にいこう:02/08/31 02:15
今、自宅のexcel2000でピボットテーブルを自動記録して作ってるんですが、
会社のexcel97でも動くでしょうか。
手元の本には「2000ではドラッグ&ドロップで作成が楽になった!」とか書いてあるんで、
不安なんですが、VBAコード自体も異なるんでしょうか?
よろしくお願いします。
>>223
入力後のセル移動方向を「右」に設定しておいて、こんなんでどうだろう?
A1 → D1 → G1 → J1 → M1 →
A2 → D2 → G2 → J2 → M2 →
...と移動するものと仮定して、

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Select Case Target.Column
                Case 2, 5, 8, 11
                        Target.Offset(0, 2).Activate
                Case 14
                        Target.Offset(1, -13).Activate
        End Select
End Sub

すぐ右の列を選択できなくなっちゃうけど、
入力終わったらマクロを止めちゃうと言うことで...
226名無しさん@そうだ選挙にいこう:02/08/31 11:39
>>225
結構、悩んだのですが、あっさり対処方法がみつかってしまいました。
早速、マクロ組んでみます。
素早い回答ありがとうございます。
>>223
TABで横へ移動すればいいんでないのかい
A1 入力 tab B1 入力 tab C1 入力 tab D1 入力 ENTER(勝手にA2に移動するはず)
A2 入力 tab …
228 ◆GORUA2AQ :02/09/01 03:43
データを入力したいセルの保護を解除

シート保護をかける

データ入力→Tab→データ入力→(゚д゚)ウマー
229 ◆GORUA2AQ :02/09/01 03:47
あ、データ入力時にEnterは押さないほうが(・∀・)イイ!!よ

と、セルの保護じゃなくてセルのロックだったね。
CommandBarに以下のようにして、
CommandBarComboBoxを追加しました。

Dim CB As CommandBar
Dim CBCtrl As CommandBarControl

Set CB = Application.CommandBars("Worksheet Menu Bar")
Set CBCtrl
= CB.Controls("挿入(I)").Controls("一括挿入").Controls.Add(Type:=msoCo
ntrolEdit)

With CBCtrl
.Caption = "挿入縦サイズの設定"
End With

このとき、Type:=msoControlEditですので、
記入欄に文字をかきこむことができます。

その文字をプログラムにうけわたすには?
また、記入欄に初期値をかきこんでおくには?
また、記入欄の文字を変更した場合、初期値をそれに変更するには?

どうか教授ください。


231名無しさん@そうだ選挙にいこう:02/09/03 10:19
うちのEXCELにはmsoControlEditはないのでMSDNでみたところ、
msoControlEditはテキストボックスということなので、

Application.CommandBars("Worksheet Menu Bar"). _
  Controls("挿入(I)").Controls("一括挿入").Text

でフォームなどのテキストボックスと同様にやり取りをできると思うけど。
Di CBCtrl As CommandBarEdit
 という風にオブジェクト型を断定すると、固有のメンバが表示されるので、
そこで.Textプロパティがでてくるはず。
232231:02/09/03 18:21
Dim CBCtrl As CommandBarEdit

m 抜けてた(w
233230:02/09/03 21:46
解決いたしました。
とはいってもMougにも相談したんですけど。

231さんのおっしゃるとおり、Textプロパティをもちいました。

まず、ThisWorkbook部に
以下のようにしてコマンドバーを定義しておきました。

Dim CB As CommandBar
Dim CBCtrl As CommandBarControl

Set CB = Application.CommandBars("Worksheet Menu Bar")
Set CBCtrl
= CB.Controls("挿入(I)").Controls("一括挿入").Controls.Add(Type:=msoCo
ntrolEdit)

With CBCtrl
.Tag="わはは"
.Caption = "挿入縦サイズの設定"
.Text="30" ←ここで初期値の設定
End With
234231:02/09/03 21:47
(233のつづき)
そして、記入欄の数値を用いる関数にて(たとえばとしてmodule内としておきます。)
上記Tag:="わはは"をもつコマンドバーを探し出し、Textプロパティを用いて
値をとりだしました。

Dim t As Integer
Dim CBS As CommandBarComboBox

Set CBS = Application.CommandBars.FindControl(,,Tag:="わはは")
t=CBS.Text

どうもレスありがとうです。
23545:02/09/12 17:38
>>26
俺の最近のお気に入りはモンパチとデリコだね、もう断トツで。
ミスチルやB’zもロックファンとしては外せないでしょ。
しぶいところではエゴラッピンなんかもきっちり押さえてますよ。
ロック以外でもいろいろ聴いてるなあ。浜崎とか林檎とか好きだし。
宇多田も倉木も両方好きだし。意外に思われるかもしれないけど、
ドラゴンアッシュとかケツメイシなんかもたま〜に聴いてる。
洋楽はねえ、セリーヌとマライアがメインかな。
でも近頃はオアシスとかも好きになってきた。
あと落ち込んだ時なんかにはレディヘとか聴いたりして・・・
うわ、マニアックだな俺(笑
まあモーニング娘を聴いてるような人とは音楽の話はしたくないね(笑
236名無しさん@そうだ選挙にいこう:02/09/13 01:27
Win2000+Excel2000です。

たとえば1行に5個くらい数字があって、
それを行単位でグラフにしたいと考えています。
それが100行くらいあって、グラフをそれぞれ作成したいとき、
(数字が違うだけでグラフの形は同じ)
(たとえば
1 50 85 32 25 40
2 46 90 42 35 50
3 55 99 60 40 60

100 32 24 60 85 91
などの数字を1行づつで折れ線グラフをつくりたい。)

・そのグラフを作成するには?
(For〜Nextで繰り返しをすればいいのはわかるが、データの取り方でつまづく)
・そのグラフを100とおり作成したとき、別ののシート中に、重ならずに表示するには?
(グラフを次々つくると同じ場所に重なってできてしまう)
どうすればいいでしょか。

ついでにそのグラフを画像としてPowerPointに1グラフ/1ページで
貼り付けられればいうことないのですが。
237名無しさん@そうだ選挙にいこう:02/09/13 10:08
エクセルの次期バージョンのビバはドットネットになるんですか?
>236

A1〜E1はタイトルとして固定
並べるのは面倒なので、グラフシート
PowerPointなぞ持ってないので知らん。

Sub test()
 Dim titleR As Range, DataR As Range
 Dim i As Integer, myC As Chart

 With Worksheets("Sheet1")
   Set titleR = .Range("A1:E1")
   For i = 2 To 100
     Set DataR = .Range("A" & i).Resize(1, 5)
     Charts.Add after:=Sheets(Sheets.Count)
     Set myC = ActiveChart
     myC.ChartType = xlLineMarkers
     myC.SetSourceData Source:=Union(titleR, DataR)
   Next i
 End With
End Sub
239名無しさん@そうだ選挙にいこう:02/09/14 11:24
Range("B1") = StrConv(Range("A1"), vbWide)

この方法では、文字列は全角にできますが数字ができません。
数字を半角から全角にする方法を教えてください。
>>239
Range("B1") = StrConv("'" & Range("A1"), vbWide)
241初心者:02/09/17 05:23
すみません。教えてください。

例えば
2 2 4
2 4 4 
5 8 8

とあった時セルの中に2がいくつ、4がいくつ・・を調べて
出力したいんです・・。

For j (J=2,4,5,8) (←?)
For i = 1 To 3
Cells(1+i,1)Select (←出力するところ)
ActiveCell.FormulaR1C1 = "=COUNTIF(Rang(Cells(,),Cells(,)),j)"
Next i Next j            (←↑?)    
End Sub

?の部分がよくわかりません。わかる方よろしくおねがいします。
242名無しさん@そうだ選挙にいこう:02/09/17 14:21
Excel2000のVBAで一つ質問があります。

VBAのモジュールから、任意のアプリケーションがすでに起動されているかどうかを調べて、
起動されている場合は処理を一時中断し、起動されてない場合は任意のアプリケーションを起動して処理を続行させるプログラムを作成したいのですが、
このような処理はエクセルのVBAで可能でしょうか?

もし可能ならば、ヒントだけでも良いので教えてください。よろしくお願いします。
>>241

A1〜C3にあったとしたらE列に出る。
A1〜C3を選択してから実行。

Sub ハァ()
Dim f, j As Integer, c As Integer, i As Long
With Selection
 If .Areas.Count = 1 Then
  c = .Column + .Columns.Count + 1
  f = Array(2, 4, 5, 8)
  j = 0
  For i = .Row To .Row + UBound(f)
    Cells(i, c) = "=""" & f(j) & _
           "は"" & Countif(" & _
           .Address & "," & _
           f(j) & ") & ""個"""
    j = j + 1
  Next i
 End If
End With
End Sub
244241:02/09/17 21:27
>>243
ありがとうございます!!!きちんと動きました!!!
これで夜も寝られる・・。
246名無しさん@そうだ選挙にいこう:02/09/18 09:42
>>245
ありがとうございますm(__)m
これで何とかなりそうなので頑張ってみます。

ほんと助かりました!!
247246:02/09/18 09:44
と思ったら、プログラムがすでに起動しているかどうか調べるうまい方法考えないといけなかった…(-_-)
248名無しさん@そうだ選挙にいこう:02/09/18 21:08
Excelののウィンドウの左上に表示されているアイコンを変更するこ
とは可能でしょうか?
タイトルを変更するのはCaptionの変更でできたのですが、いろいろ
調べてみましたがわかりませんでした。

どなたかご存知の方がいましたら教えていただけないでしょうか?
249246:02/09/19 09:15
>>248
Excel本体?それともVBAで作成したフォームのアイコン?
本体は多分変えれないと思うのだが・・・
250247:02/09/19 09:37
>>249
Excelのアプリケーション本体のアイコンです。

シェアウェア等でExcelを使用したアプリなどがアイコンだけ
自前のものにしているのがよくあるのでできるとは思うので
すが。

某サンプルは手に入れたのですがコードが有料なもので、、
251248:02/09/19 09:38
↑すいません248の間違いでした。
252名無しさん@そうだ選挙にいこう:02/09/21 23:37
最近VBAを始めましたが、順番にテキストどおりに進めていって、以下の所で躓いてしまいました。

Private Sub CommandButtom2_Click()
Dim Ret As Integer
Ret = NsgBox("ブックを終了しますか", vbOKCancel,"ブックの終了")
 If Ret = vbOK Then
ActiveWoekbook.close
End If
Unload UserForm1
End
End Sub

コマンドボタン(CommandButtom2)をクリックすると
「OK」「キャンセル」の2つがメッセージボックスが表示されるマクロになってますが
「OK」のみが表示されるメッセージボックスになるようにするにはどうすれば良いのでしょうか?
>252

vbOKOnly
254252:02/09/23 00:39
>>253
If Ret = vbOK Then を vbOKOnlyにすれば良いのでしょうか?
255名無しさん@そうだ選挙にいこう:02/09/23 00:54
>254
Ret = NsgBox("ブックを終了しますか", vbOKCancel,"ブックの終了") の方
256252:02/09/23 01:21
なるほど
Ret = NsgBox("ブックを終了しますか", vbOKOnly,"ブックの終了")
でいいわけですよね?
夜遅くにありがとうございます。
257253:02/09/23 01:32
>254

回答は 255さんのフォロー通り

vbOKOnlyにするって事は、If Ret = vbOK Then は無意味になるってこと。
戻り値を気にしないケースに使う。

Private Sub CommandButton2_Click()

 MsgBox "ブックを終了します", vbOKOnly + vbCritical, "ブックの終了"
 Unload Me
 ActiveWorkbook.Close

End Sub
258名無しさん@そうだ選挙にいこう:02/09/23 01:36
259252:02/09/23 01:39
あぁ、分かりやすい説明でありがとうございました。
なにぶん仕事で全然触った事のないVBAだったので、
いくらテキストを見てもさっぱり分からなかったんです。

本当にありがとうございました。
でも、終了のキャンセルができないのって意味無いね
261253:02/09/23 03:59
>260

そうだね。
こういったケースで使うのはおかしい。

「エラーが出たので処理を中断します」とか、「データが不正で実行出来ません」とか、
それ以外にない時に使うもんだと思う。
262 :02/09/23 11:46
userform上のテキストボックスで、テキストを打ち変えるのに
右クリックのメニューを表示させたいんだけど、どうやったらいいの?
できないのかなあ・・・。
263  :02/09/23 13:38
>>262
>できないのかなあ・・・。
お前みたいなやる気の無い奴は氏ねば?

切り取り、コピー、貼り付けのプロシージャは自分で書け
Private Sub UserForm_Initialize()
On Error Resume Next
Application.CommandBars("MyPopUp").Delete
On Error GoTo 0

With Application.CommandBars.Add( _
Name:="MyPopUp", _
Position:=msoBarPopup, _
Temporary:=True)
With .Controls.Add(Type:=msoControlButton, Temporary:=True)
.Caption = "切り取り"
.OnAction = "ProcedureCut"
End With
With .Controls.Add(Type:=msoControlButton, Temporary:=True)
.Caption = "コピー"
.OnAction = "ProcedureCopy"
End With
With .Controls.Add(Type:=msoControlButton, Temporary:=True)
.Caption = "貼り付け"
.OnAction = "ProcedurePaste"
End With
End With
End Sub
264263:02/09/23 13:38
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.CommandBars("MyPopUp").Delete
End Sub
Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = xlSecondaryButton Then
CommandBars("MyPopUp").ShowPopup
End If
End Sub
265262:02/09/23 17:35
ほお・・なるほどね。こういうやり方でいいわけか・・。

ありがとう。
266262:02/09/23 17:44
ん??実際にカット&ペーストは出来ないぞ??

まあ後は自分で調べます。ありがと。
267262:02/09/24 22:43
あのう・・・わかんない・・・
テキストボックスの文字列の一部分を反転させて切り取るのってどうやんの?
>>262
こんなのがあった。2K以降らしいです。
ttp://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=ntr;tree=31;id=FAQ
269名無しさん@そうだ選挙にいこう:02/09/28 00:24
数式を文字列として、タブ区切りで、クリップボードにコピーするマクロを作りたいのですが、
文字列を、クリップボードにコピーする方法がわからなくてつまりました。

こんなんじゃだめみたい
a="aa"
a.copy
>>269
ツール→参照設定で、
Microsoft Forms 2.0 Object Library (バージョンはOfficeによって違うかも)
にチェックを入れて、
Dim myData As New DataObject
myData.SetText "aa"
myData.PutInClipboard
返事ありがとうございます。
バージョンは、Excel2000なのですが、Microsoft Forms 2.0 Object Library
は入っていませんでした。

ソースを実行すると以下のエラーが発生します。
"Dim myData As New DataObject"のところで、
"コンパイルエラー。ユーサー定義型は定義されていません。"


似たような名前かなと思って以下の二つを試しましたが違いました。
Microsoft Data Formatting Object Library 6.0(SP4)
Microsoft Remort Data Object 2.5 Library

以下の4つは最初からチェックがついていました。
Visual Basic For Applications
Microsoft Excel 9.0 Object Library
OLE Automation
Microsoft Office 9.0 Object Library
>>271
むむ...それじゃ
挿入→ユーザーフォーム
でダミーのフォームを追加してみたらどうだろう?

参照設定されたことを確認したうえで、左上のツリー表示のところから
解放すると言うことでヽ~ノ´Д`)
(追加されたフォームを右クリック→(Form名)の解放→いいえ)
>>271

Sub aa()
Dim MyData As DataObject

 Set MyData = New DataObject
   MyData.SetText "aaa"
   MyData.PutInClipboard

End Sub
>>272

VBのGUIを作ったことがないので、フォームとかの扱いがわかりません。
VB本でも、借りてきて勉強することにします。

>>273

As DataObject が通りません。
HELPにも、載ってるのに、何で通らないでしょうね。
275270,272:02/09/29 08:54
>>274
DataObjectが定義されてるのがMicrosoft Forms 2.0 Object Libraryのなかだから、
これが参照されてなければ「そんなのしらないよ」ってエラーが出る。

で、このライブラリはフォームを一個追加すれば自動的に参照設定されるはずなんだけど。
そのあとすぐにフォームを消しても参照設定残るから、そのあとは普通に使えるはず。

ってことだけどヽ(´▽`)ノ
1.sheet1〜sheet10までのcell(3.7)のデータを加算してsheet11のcell(3,7)に格納
2.sheet1とsheet2のcell(3.7)のデータの大きい方をsheet("result")のcell(3,7)に格納
見たいな、sheet越しの操作をやろうとして、例えば、

For i=1 to 10
sum += sheet(i).cell(3,7).value
End
sheet(11).cell(3,7).value = sum
のようにスマートに書きたいのですけど、どなたか文法面で
上のコードを補ってください。
277(´。`)・・・。 :02/10/01 19:38
ActiveWorkbook.Sheets("Sheet1").SaveAs FileName:="C:\sheet1.csv", FileFormat:=xlCSV
ActiveWorkbook.Sheets("Sheet1").SaveAs FileName:="C:\sheet1.csv", FileFormat:=xlCSV
ActiveWorkbook.Sheets("Sheet1").SaveAs FileName:="C:\sheet1.csv", FileFormat:=xlCSV
ActiveWorkbook.Sheets("Sheet1").SaveAs FileName:="C:\sheet1.csv", FileFormat:=xlCSV
ActiveWorkbook.Sheets("Sheet2").SaveAs FileName:="C:\sheet2.csv", FileFormat:=xlCSV
ActiveWorkbook.Sheets("Sheet3").SaveAs FileName:="C:\sheet3.csv", FileFormat:=xlCSV
ActiveWorkbook.Sheets("Sheet4").SaveAs FileName:="C:\sheet4.csv", FileFormat:=xlCSV
-------------------------
こんなVBAって普通?
もっと綺麗にかけてもいいと思うんだけど。
For i = 0 To 4 〜Next i でくくりたいけどsheet${i}の用に変数展開が出来ない。

ミナサン、この大問題をどうしてマスカ。
ちなみに今まで僕は、一々、Unix上でスクリプト書いて
変数展開してからVBEにコピペしてマスた。


>>276

「補ってください」が、なんかムカツク

For i = 1 To 10
  Result = Result + Worksheets(i).Cells(3, 7).Value
Next i
Worksheets(11).Cells(3, 7) = Result
279ほれ:02/10/01 19:58
>>277

Sub ハァ()
Dim ws As Worksheet

 For Each ws In Worksheets
   ws.SaveAs FileName:="C:\" & ws.Name & ".csv", FileFormat:=xlCSV
 Next ws

End Sub
みなさん、ありがとうございました。

「文字列を、クリップボードにコピー」が、できました。
これができたので、「数式を文字列として、タブ区切りで、クリップボードにコピーするマクロ」
の方も、作れました。
281名無しさん@そうだ選挙にいこう:02/10/03 13:57
初歩的なことですいません。

Excel2000の起動時にIMEをONにするには、
どのように記述したらよいのでしょう?
ヘルプ見ても良く分かりません…
>>281
ImmSetOpenStatus
283sage:02/10/09 04:13
OLE技術のEXCELを外部アプリから操作できる部分は知っているけど、
VBAを起動したり、VBAのインタープリタを操作する方法ってありますか?
284ううう:02/10/09 23:59
スピンボタンが1から16まであるとして、そのどれかを(up、down)
クリックしたときにそのクリックしたスピンボタンの番号を取得・変数に代入
したいんだけど・・・どのオブジェクトのどのイベントで発生させたらいいのかな。

いろいろ調べてるんだけどわからないれす。
285名無しさん@そうだ選挙にいこう:02/10/12 21:35
こんばんわ。どうか教えてください。
過去ログで、「署名」をするやり方を見たのですが、
私のエクセルには、その「デジタル署名」というところの「選択」を押しても
「証明書」がひとつもかかれていないのです。
(選択するものがないんです)

「選択肢」を作るには、どこで「証明書」をもらってきたらよいのでしょうか?
っていうか、私は署名できないんでしょうか?

よろしくお願いします。m(__)m
286ううう:02/10/13 00:15
こんなんしてみたけど、うまくいかん。ううう

n = 1
Do Until UserForm1.Controls("spinButton" & n).Value = 1
If UserForm1.Controls("spinButton" & n).Value = 1 Then Exit Do
n = n + 1
Loop

If Controls("TextBox" & n * 4 - 2).Value = "" Then Exit Sub
str_length = Len(Controls("TextBox" & n * 4 - 2).Text)
Controls("TextBox" & n * 4 - 1).Text = Right(Controls("TextBox" & n * 4 - 2).Text, str_length / str_length) + Controls("TextBox" & n * 4 - 1).Text
Controls("TextBox" & n * 4 - 2).Text = Left(Controls("TextBox" & n * 4 - 2).Text, str_length - 1)

If LenB(Controls("TextBox" & n * 4 - 1).Text) > overflow Then
Controls("Frame" & n).BackColor = &HC0C0FF
Else: Controls("Frame" & n).BackColor = &H8000000F
End If

287名無しさん@そうだ選挙にいこう:02/10/13 01:16
列幅・行高が決まっている枠(結合されたセル)があって、そこにマクロ
で文字列を流し込むんだけど、文字列が長いと枠からはみ出ますよね?
(自動調整はしていない)
で、文字サイズを下げて枠に収まるように調整したいんだけど、枠からあ
ふれているかどうかを判定する方法ってないすか?

Do While (あふれている)= True
(セルのフォントサイズを下げる)
Loop

てな感じで。
288  :02/10/13 01:24
>OLE技術のEXCELを外部アプリから操作できる部分は知っているけど、
>VBAを起動したり、VBAのインタープリタを操作する方法ってありますか?
あるよ。俺はいろんな処理をEXCELファイルにVBAで関数を作って
おいて、VBスクリプトからEXCELファイル内の関数を呼び出してます。
NTのスケジューラでVBスクリプト定期実行させてるよ。
>286

Dim spn As Control
Dim spnV

Sub Set_Cont(Cont As Control)
 Set spn = Cont
 spnV = Cont.Value
 If Not spn Is Nothing Then MsgBox spn.Name & Chr(13) & spnV
End Sub

Private Sub SpinButton1_SpinUp()
 Set_Cont SpinButton1
End Sub

Private Sub SpinButton1_SpinDown()
 Set_Cont SpinButton1
End Sub

Private Sub SpinButton2_SpinUp()
 Set_Cont SpinButton2
End Sub

Private Sub SpinButton2_SpinDown()
 Set_Cont SpinButton2
End Sub
290ううう:02/10/13 11:23
あ・ありがとう〜。
たすかりました。
291  :02/10/14 12:37
EXCEL板に書いちゃったけどこっちに書かなきゃいけなかったかも・・
とりあえずもう一回こっちで聞かせてもらいます

仕事で使ってる住所録があるんだけどオートフィルターの〜始まるしか
使わないのでテキストボックスとボタンで速攻検索できる用にしたいんです。
試行錯誤してるんだけど、できない!
とりあえずコードもわkんないんでオートフィルターのマクロをいじってんですが
テキストボックスに入力している文字列が取得できてないみたい。
だれかおしえて〜、説明がたんないならこたえまーす。
3日間仕事そっちのけでやってるン、



>>291
おぃおぃ↓は無視してマルチポストか?
http://pc.2ch.net/test/read.cgi/bsoft/1033983470/175
293 :02/10/14 14:13
292>>
ごめ〜ん
いいとこおせーてくれてありがと
これ使えそうです。
294ううう:02/10/14 14:52
あれれ???
LenB関数って、全角2バイト・半角1バイトで文字数数えるんじゃなかったっけ???

シート上だと「新宿区1-3」は9で返ってくるのに、VBAのコード内で
計算させると12で返ってくるよ・・。何でだ?
295名無しさん@そうだ選挙にいこう:02/10/14 15:12
取引先から「このシートへ入力して下さい」と言われて添付ファイル
みたら小数点以下の金額計算処理がされてなかった。親切にも俺が
直してデータを送ってるんだけど何も反応が無い。
大手の損保会社なんだけど、金のスペシャリストである保険屋が
こんなんで良いのか?

スマン、相談になってないな。
296名無しさん@そうだ選挙にいこう:02/10/14 16:24
>>295
晒せ!
>294

Unicodeで扱われてるのよ。

Sub uniuni()
 s = "新宿区1-3"
 MsgBox LenB(s)
 s = StrConv(s, vbFromUnicode)
 MsgBox LenB(s)
End Sub
298ううう:02/10/14 21:47
ふーむ・。

ちゅうことは、一旦unicodeから戻して、処理した後にまたunicodeに
戻さないといけないのか。
>298

つーか、何がしたいわけ?

>286 も読む気がしないソースだし。
300ううう:02/10/14 22:08
>>286とは違う話で。

全角半角入り乱れた文字列(住所録)がシート上に9000件ぐらいあって、
36バイト目で折り返し処理をしたいわけ。

Lenでやれば簡単だけど折り返し位置が一定にならないから、バイト数で
かぞえないといけなくてさ。
>300

36バイト目が1バイト文字か2バイト文字かは関係ないわけ?
302ううう:02/10/14 22:50
ある。それで悩んでる。
303名無しさん@そうだ選挙にいこう:02/10/14 23:22
>>302
やりかたはいろいろあるが、住所の分割なら全部全角にしてから
分割するのがあとあと便利だと思う。
あとは、数字(1−9)来るまでで分割とか、都道府県でまず分割する
とかすればいい。
>302

だから、LENBで1バイト文字も2バイト文字も2byteで返るのに、

「一旦unicodeから戻して、処理した後にまたunicodeに
戻さないといけないのか。」

となるのかって事よ?

Sub aho1()
Dim s1 As String, s2 As String
 s1 = "A"
 s2 = "あ"
 MsgBox s1 & " は、" & LenB(s1) & "byte" & _
       Chr(13) & s2 & " も、" & LenB(s2) & "byte"
End Sub

Sub aho2()
Dim s As String

 s = "東京都千代田区外神田x丁目xx番xx号あほーはいつ304号"
 If LenB(s) > 36 Then
   MsgBox MidB(s, 1, 36) & Chr(13) & MidB(s, 37, LenB(s))
 Else
   MsgBox s
 End If

End Sub
305bloom:02/10/14 23:31
306ううう:02/10/15 00:07
半角も全角も2バイトで扱うと、一件一件の折り返し幅が
一定にならないでしょ。幅の決まった用紙にプリントアウトするので。
307303:02/10/15 00:15
>>306
だから全部全角に変換したら何か問題あるのか?

Sub test()
Dim s As String
s = "新宿区3-6-8極東ビル3F"
s = StrConv(s, vbWide)
Debug.Print s
End Sub
>306

36byte目が、2バイト文字の1byte目、2byte目の可能性がある以上、
一件一件の折り返し幅を一定しようが無いと思うが。。。

まぁ、いいや。理解出来ないんでお好きなように。
309無名:02/10/15 17:18
文字を1つ1つ判別して数えるしか無いんじゃないの?こんな風に…。
Function StringLineFeed(MasterString As String, Optional OutLength As Long = 36, Optional LineFeedChar As String = vbCrLf) As String
Dim RoopVariable As Long, LineCharCount As Long, UniLen As Long
LineCharCount = 0
For RoopVariable = 1 To Len(MasterString)
UniLen = LenB(StrConv(Mid(MasterString, RoopVariable, 1), vbFromUnicode))
If LineCharCount + UniLen <= OutLength Then
LineCharCount = LineCharCount + UniLen
StringLineFeed = StringLineFeed + Mid(MasterString, RoopVariable, 1)
Else
If Mid(MasterString, RoopVariable, 1) = "。" Or Mid(MasterString, RoopVariable, 1) = "、" Or Mid(MasterString, RoopVariable, 1) = "," Or Mid(MasterString, RoopVariable, 1) = "." Or Mid(MasterString, RoopVariable, 1) = "’" Then
LineCharCount = LineCharCount + UniLen
StringLineFeed = StringLineFeed + Mid(MasterString, RoopVariable, 1)
Else
LineCharCount = UniLen
StringLineFeed = StringLineFeed + LineFeedChar + Mid(MasterString, RoopVariable, 1)
End If
End If
If LineCharCount >= OutLength Then
LineCharCount = 0
StringLineFeed = StringLineFeed + LineFeedChar
End If
Next
End Function
310無名:02/10/15 17:26
309の様にしても
名無しさん@そうだ選挙にいこう さんの言っている様に36文字目の問題は出てきます。
309の関数の場合は36文字目が『、。,.’』の5種類の文字の場合のみ改行せずに、それ以外は35文字目で改行するようになっています。


311ううう:02/10/15 18:47
そうですね。
全部を全角にしてしまえばいいんだけど・・・
312AK:02/10/15 21:17
シートにテキストボックスやオプションボタンを貼り付けたのですが、
Tabキーを押しても次のテキストボックス等に移動してくれません。
対処方法を教えていただきたいので、ご存知の方よろしくお願いします。
313 :02/10/15 21:33
shiね。>>AK
314名無しさん@そうだ選挙にいこう:02/10/16 15:03
Excelのグラフで計算される近似式について
例えば多項式近似したときの係数ををVBAで取り込みたいんですけど
どうしたらよいのでしょうか?
Y=(anX^n)の
anをとりこむ方法を教えてください。
315x:02/10/16 15:04
これって本当か?

↓ ↓ ↓
http://www.dream-express-web.com/space-trust.htm
316名無しさん@そうだ選挙にいこう:02/10/16 19:24
↑ 浪速あきんどだしあやしそう。
314 は、どうやるんだろうねえ?
317SOS…:02/10/17 01:05
VBAを5日前に始めたばかりの初心者です。Excelのバージョンは2000です。
Accessがない環境でExcel初心者が使用するため、
Excelでユーザーフォームを使用したデータベースを作っています。
データベースのA列のデータを参照してソートし、A列に下記の様にデータが並んだとします。
A   
A   
A   
B
B
B
C
C
D
D
D
318SOS…:02/10/17 01:06
続き:
この状態で、種類が同じデータのまとまりの上に1行挿入し、
A列にその種類のデータのラベルを表示させるコードを記述したいのですが、
下のコピペを実行すると一番下のデータのまとまりのみの行の挿入で止まってしまい、
すべてのまとまりに行を挿入することができません。
申し訳ありません、どなたかお教えいただけませんでしょうか…。

Sub a()

Dim i As String

ActiveSheet.Select

i = Range("A65536").End(xlUp).Value

Range("A65536").End(xlUp).Select

Do While ActiveCell.Offset(-1).Value = i
ActiveCell.Offset(-1).Select
Loop

Selection.Insert Shift:=xlDown

End Sub
319303:02/10/17 07:13
>>311
おまえなめてんのか?!!!
全部全角じゃ問題あるのか?
と聞いてるだろうが!

無視か!てめえ覚えてろよ!
>>318
i に格納した値とセルの値が違った時点でループが終わってるから...

Sub a()
    Dim i As String
    ActiveSheet.Select
    i = Range("A65536").End(xlUp).Value
    Range("A65536").End(xlUp).Select
    Do While ActiveCell.Row > 1
        If ActiveCell.Offset(-1).Value <> i Then
            Selection.Insert Shift:=xlDown
            i = ActiveCell.Offset(-1)
        End If
        ActiveCell.Offset(-1).Select
    Loop
End Sub
321ううう:02/10/17 22:26
>>303

あれ・・いや、別に無視のつもりでもなかったんだけど・・・。
頂いたアドバイス通り、全角で処理するように変えました。

でも、きみ何屋さん?えらく朝早い時間に書き込みだね。
テキストデータを開かずに読み込んでセルに書き込みしたいんですが、
一行一行の「平成?年?月?日」という部分(数字部はランダム)を
削除してセルに書きたいんですが・・・

Do Until EOF(1)
Line Input #1, buf

rep = Replace(buf, "平成" & * & "年" & * & "月" & * & "日", "")

ActiveCell.Offset(i, 0) = rep
i = i + 1

Loop

とやってもうまくいきません。どなたかご存じの方、教えてください。
323名無しさん@そうだ選挙にいこう:02/10/17 23:28
>>322
なにがどううまくいかないんだ?
皆にもコード書いてやってみろっていってるのか?
324名無しさん@そうだ選挙にいこう:02/10/17 23:35
>>317
A
A
B
B
C
C
というデータを
<<A_Data>>
A
A
<<B_Data>>
B
B
<<C_Data>>
C
C
にしたいということ?
325SOS…:02/10/17 23:54
>>320
速レスくださり、ありがとうございます!
うまくいきました…感激。

>Do While ActiveCell.Row > 1(Activecellの行番号が1より大きい間は)

行番号って、こんな風に使えるんですね。

>i = ActiveCell.Offset(-1)(ActiveCellのひとつ上のセル)

のように変数の内容を変更することについても、全く考えが及びませんでした。
最上段のかたまりにも行を挿入したかったので、
Loopの後にも「Selection.Insert Shift:=xlDown」を記述して、
試作版の第一段階は無事成功しました。
Loopに関わるステートメントは、実践になると初心者には難しいです(汗

今、ラベルの表示に取り組んでいます。
またどうにもならなくなりましたら、書き込ませていただきますね。
本当にありがとうございました。
>>322
> "平成" & * & "年" & * & "月" & * & "日"
この部分はたぶん
"平成*年*月*日"
って感じでワイルドカード指定したいんだろうけど、
そもそもRelpace関数にワイルドカードは指定できない。

Instr、Mid、Left、Len等の文字列操作関数を使って地道にやるとか、
正規表現がわかるならMicrosoft VBScript Regular Expression 5.5あたりを
ツール→参照設定してRegExpオブジェクトを使うとか。
327SOS…:02/10/18 01:45
>>317
レスありがとうございます!
はい、その通りです。
ただ、実際のデータベースでは、データはF列にあり、
ラベルを表示させたいのがA列なので、
なかなかうまくいかないのです。
Sub a()
Dim i As String
ActiveSheet.Select
i = Range("F65536").End(xlUp).Value
Range("F65536").End(xlUp).Select
Do While ActiveCell.Row > 1
If ActiveCell.Offset(-1).Value <> i Then
Selection.Insert Shift:=xlDown
ActiveCell.Offset(0,-5).Value = i
i = ActiveCell.Offset(-1)
End If
ActiveCell.Offset(-1).Select
  Loop
    Selection.Insert Shift:=xlDown
    ActiveCell.Offset(0, -5).Value = i
 End Sub
320さん作を元にしてこのように記述しましたが、
324さんが例に挙げているようにA,B,C3つのかたまりがあったとすると、
ラベルは
1番上のかたまり(A)「挿入行+上に(1-1)の列」、
2番目のかたまり(B)「挿入行+上に(2-1)の列」、
3番目のかたまり(C)「挿入行+上に(3-1)の列」、
に表示されてしまいます。
「i = ActiveCell.Offset(-1)」
ループすることによって、この部分が影響しているのだと今気づきました。
どのようにすれば、うまくいくでしょうか…。
>>327
問題は、F列のセルのみ下にずらして逝ってること。
行全体をずらすようにしたら?

> Selection.Insert Shift:=xlDown
Selection.EntireRow.Insert Shift:=xlDown
329SOS…:02/10/18 23:03
>>328
ありがとうございます!
おかげさまで、行の挿入まではうまくいきました。
実は、上記のコードを実際のデータベース上で動作させてみて、
ご指摘の部分に関わる不具合があり(F列しか行が挿入されない)、
行全体が挿入されていないことに先ほど気づいたところだったのです。
参考にしたマクロの記録が、行番号をクリックして行全体を挿入したものだったのと、
テスト用のコードがA列を参照するものだったのが原因でした。
実際の参照と同じ条件でテストしなくてはだめですね…激しく反省しています。
>>326

参照設定必要か!?

Sub testRegex()
Dim Regex
Set Regex = CreateObject("VBScript.RegExp")
Regex.Pattern = "平成.*年.*月.*日"
MsgBox Regex.Replace("平成14年3月31日だぞ", "")
End Sub

インストールされている WSH と VBS のバージョンによると思う。
>>330
「必要じゃない、けどVBEの補完機能が使えるから参照した方が楽。」
だと思ったんでああ書いたんだけどね。
ま、その辺は好きずきで(´ー`)
332322:02/10/19 11:53
>>326

MIDとLEFTで出来ました。ありがおうございました。
333名無しさん@そうだ選挙にいこう:02/10/19 17:13
1)指定されたオブジェクトの表示・非表示を制御する
2)複数オブジェクトを選択する

以上に該当するプロパティ・メソッドを教えていただきたいのですが・・・。

ちなみにデータが入力されている最後のセル番地を取得するのは、
Valueプロパティで良いのでしょうか?
1-Visible
2-質問の意味がわからんかった。

ちなみに-質問の意味がわからんかった。
335333:02/10/19 17:32
>>334
どうもありがとうございます。

2については、自分でも良く分かってないんで、
こんなあいまいな書き方になってしまいました。
ヘルプも見てるんですが、どうにも欲しい情報が出てこなくて・・・。
336333:02/10/19 19:06
すいません、自己解決しました。
337Fu:02/10/21 00:05
他ブックを閉じる操作について質問します。

Application.Run で呼ばれた別ブックのマクロ中から,呼び出し元のブックを
閉じる操作をしたいのですが,Workbooks("呼び出し元.xls").close が全く動
かないのです。

環境:Excel 2000, Windows 2000 Professional
338だれか:02/10/21 00:32
アクセスのVBについて教えてくれる人いる??????????????????????????
339Fu:02/10/21 03:44
>>337 Workbooks("呼び出し元.xls").close が全く動かないのです。

すいません,状況書き間違えました。書き直します。

あるブックから Application.Run で呼ばれた別ブックのマクロ中で,呼び出
し元のブックを閉じる操作をしたいのですが,Workbooks("呼び出し元.xls").Close
を実行すると,呼び出された側のマクロがそこで終了し,その後の処理に進み
ません。

その後の処理では,Thisworkbook.Close として,呼び出された側のブックも
閉じてきれいさっぱりしたいのですが...

環境:Excel 2000, Windows 2000 Professional
>>339
別ブックを Workbooks.Open(Filename) で呼び出すんじゃダメなの?
ウチのエクセル、ファイル開こうとしたら
『読み取り専用ファイルか、読み取り専用の場所にアクセスしようとしています』
って出て、大事なファイルが開けなくなりました・・・
どうしたらいいんでしょう・・・
どうか皆様、教えて下さいm(__)m切実なんです・・・
>339

何したいのか良く理解出来ない。
343ぽこん:02/10/23 21:52
仕事でシート毎の印刷設定を手差しから自動給紙に変更しているのですが、結
構シート数があるのでめんどくさい!ところが複数のシートをまとめて設定し
ても、変更されるのは最初の1枚のみ。マクロで操作を記録しようとしても記録
されません。どうしたらマクロでプリンタ設定の変更が出来るのでしょうか?
詳しい方教えていただけませんか?
( Windows2000 : Excel2000 )
>>341

ぱちょこん再起動してやってみれ
345あははははは、:02/10/23 23:06
>>338
いないよ〜、きっと〜。
346ふむ:02/10/23 23:42
>>343
無理だと思ふが・・・
>>343
俺もそれ悩んだことある。で、結局あきらめた。
348もみじや:02/10/27 06:58
>>343,>>347
SendKeyでやるしかないですぅ〜
349ぽこん:02/10/27 20:04
>もみじやさん
そうですか・・・でもSendKeyだとそれぞれ設定が違うので都合が悪いな、と思って。なんかWSH&レジストリでいじる方法があるみたいなんですが・・ちょっと調べてやってみます。どうもありがとうございました。
350名無しさん@そうだ選挙にいこう:02/10/27 20:19
351中坊(なかぼう):02/10/29 10:48
会社間のやり取りでメールに添付したエクセルが文字化けします

先方からきたエクセルは当方で解凍して開けるんですが、当方から

圧縮及びそのまま送ったエクセルの添付ファイルが開けません

どなたかお知恵を拝借できませんでしょうか?




>351
お互いのバージョンが違うだけでは?
353中坊(なかぼう):02/10/29 11:45
かもしれませんね笑
354名無しさん@そうだ選挙にいこう:02/10/30 22:55
せんせー質問です
エクセルですが、例えば小遣い帳で日にちを
30日→1日の順に並べ替えたいときに
日付のところの順序を変えると、日付のみが
変更してしまいます。

これを、その日の使った金額も同時に並べ替えるときは
どうしたらいいのでしょうか?
よろしくお願いします。
>>354 エクセル2002でできました。
エクセル2000でもできるんでしょうか?
>>354 データ入ってる所を全部選択してから並び替え
セルにある文字列を一文字づつ文字コードに変換したいんだけど、
下のようにやっても、-32667とかヘンな数字で返ってきます。
なんでですか・。


a = Len(ActiveCell.Value)

  For i = 1 To a

    Cells(i, 1).Value = CStr(Mid(ActiveCell.Value, i, 1))
    Cells(i, 2).Value = Asc(CStr(Mid(ActiveCell.Value, i, 1)))

  Next i
>>357
マイナス値の場合には +65536 してください
359357:02/10/31 21:21
+65536したけど・・おかしい
>>359
どういう文字がどういう結果になったの?

361357:02/11/01 00:37
例えば、「大」って文字、アスキーコードは16999なのに、-28187で返ってきます
>>361
ASC関数はシフトJISコードで値を返すようです。

「大」はシフトJISコードで 91E5。 10進数にすると37349。
ここから65536を引くと -28187
363 :02/11/01 01:14
>>354
幼稚園児ですか?脳が悪いね。
364Excelで在庫分析:02/11/01 17:16
先人の知恵をお借りしたくまかりこしましてございます。

とあるExcelファイルにあるマクロモジュールを
独立した別ファイルにして共通化し、
複数のファイルで利用したいのですが、これって可能でしょうか?

ちょっと調べてみると
call関数で外部DLLなるものを呼べるらしいのですが2002限定みたいだし…。

一応VBAとオブジェクト指向言語は理解しています。
ご存知の方いましたらよろしく御願いします。


>>364
PERSONAL.XLS使うんじゃダメなの?
>>365
その手がありましたね。
あと、調べてみたらアドインアプリケーション(DLLじゃなくxlaのほう)を用いても
実現できそうです。
各端末への実装を考えるとこっちのほうが簡単かも?

アドヴァイス有難うございました。
どなたか助けてください。

1.社内メールで、マクロ入りのExcelファイルがきますた。
2.開けて、マクロを有効にしてファイルの中味を確認しますた。
3.特に保存などはせず、メールのまま留め置きました。
4.「さて、自分の仕事にとりかかるか」というわけでExcel起動。
5.データ作成を1時間ほど。この間、右クリックは使用せず。
6.新しいデータ作成に入り、右クリック!
7.いきなり右クリックメニューの一番上に、
  「○○の一括コピー」という変なメニューが!
   ちなみに○○は本社のデータ名。
8.こんな変なメニューは削除したいんです。
  で、メールもファイルも全部削除してみますた。
   でも削除できないんです。ううっ・・・(泣)
ちなみに、この一括コピーという奴を使ってみると、
「●●のファイルが見つかりません。」と出て、それきりです。
●●は、メールで送られて来た添付ファイルの名前です。

明快な回答はもちろん、推測でもなんでもOKです。
いったい俺のパソコンの中で何が起こったんでしょうか。
助けてください。よろしくお願いします。
>367

Sub aaa()
 Application.CommandBars("CELL").Reset
End Sub
>368
ありがとうございます!
今自宅なんで、明日出社したらすぐ入れてみます!
明晩結果をカキコしますので、よかったらまた読んでください。
ありがとうございました。
370367:02/11/02 00:24
>369

Sub MenuAdd()
  With Application.CommandBars("CELL").Controls.Add(before:=1)
      .Caption = "Click Me"
      .OnAction = "ShowMsg"
  End With
End Sub

'--------------------------------------------------------------
Sub ShowMsg()
  MsgBox "キタ━━━━(゚∀゚)━━━━!!!"
End Sub

'--------------------------------------------------------------
Sub MenuReset()
  Application.CommandBars("CELL").Reset
End Sub
371助けてください:02/11/02 07:31
なぜかわからないが、家のPCのエクセルがおかしくなりました。
office2000なんですが、エクセルを立ち上げると、ワークシートしか
出てこなくて、メニューバーもツールバーもありません。
このままでは非常に使いづらいので、どうすれば復活するのでしょうか?

ちなみに一度アンインストールして、再度インストールしてもダメでした
372bloom:02/11/02 07:43
374367:02/11/02 21:30
>>367です。
セル上での右クリックは元通りになりますた!
ありがとうございました!

しかし、行番号・列番号上で右クリックすると
やっぱまだ残ってるんです。余計なのが。
どうしたらいいんでしょうか・・・。
引き続きご教授願えたらと思います。
どうかよろしくお願いします。

>>370
いぢわる。


375368:02/11/02 22:12
>374

Cell を Row や Column に変える。

370もオレだよ。
どうやるか教えただけ。
376367:02/11/02 22:26
>>375
そ、そうですたか(汗
すんません。
だって真ん中にキタ━━━━(゚∀゚)━━━━!!!"
とか入ってるからからかわれてるとか思っちゃって。
激しく初心者なもんで・・・。
早速やってみます。
ありがとうございました。
377助けてください:02/11/02 23:37
371です
>>373
どうもありがとうございました。
復活しました
378名無しさん@そうだ選挙にいこう:02/11/03 09:11
 会員名 年齢 住所 コース名 入会日
**中嶋 あき  27 川崎市川崎 法人A 1999/6/15
 佐々 舞子 43 横浜市都筑区 シングルA 2000/8/1
++富樫 直子 29 横浜市戸塚区 シングルA 1999/7/30
**中嶋 あき 27 川崎市川崎 法人A 1999/6/15
++富樫 直子 29 横浜市戸塚区 シングルB 1999/7/30

↑のようにユーザーフォームからデータを入力しています。
"**"のようにまったく同じ値があったときその値を削除したいのです。
しかし"++"のように名前は同じなのですがコース名や入会日が違う場合は
削除をいきなりするのではなくメッセージボックスで削除するかそのまま記録するか
選べるようにしたいのですが可能なのでしょうか?
重複だけに重複しているかもしれません・・・
いろいろ検索してみたのですが思うようにいきませんでした。
よろしくお願いいたします。
379378です。:02/11/03 11:06
↑は無視してください
380366:02/11/05 15:31
アドインファイルの作り方や参照設定の方法は
ヘルプやHP見て分かりましたが
肝心のアドイン内関数の呼び出し方法がわからない。・゚・(ノД`)・゚・。

単に共通化したいモジュールをエクスポートしてまとめて.xlaファイルにしただけじゃ
だめですよねぇ…
381もみじや:02/11/07 00:29
Publicの関数やプロシジャは素で呼び出せたと思いますが?
できなかったっけ・・???
Excel2000を使用しています。
基準年月,店番,分類,売上金額
200209,105,B,20000
200210,100,A,10000
200210,105,B,20000

のようなレイアウトの表を基準年月で抽出したあと、
店番(行)×分類(列)のクロス集計した表を作成しようとしています。
そこで、2つの方法を考えました。
1.2次元配列を宣言し、該当するレコードについて対応する配列要素に加算する
  加算が終わったら、二次元配列から集計表に編集する
2.レコードについて一端、以下のように表のレイアウトを変更
 基準年月,店番,分類A金額,分類B金額,・・・・・
200010,100,10000, 0,・・・
200010,105, 0,10000,・・・
 集計表ではsumif関数で集計するシートを使う

ですが、どちらもスマートなやり方に思えません。
もっと簡単な方法はありませんか?
383382:02/11/08 20:29
なお、二次元配列を宣言、とあるように、
店番の数、分類の数ともに固定と判断されて結構です。
384名無しさん@そうだ選挙にいこう:02/11/08 22:37
EXCEL2000を使っています。

 A:ドライブ(FD)に「平成14年11月8日」と言う具合に、その日のデータを保存し
ています。毎日のデータを保存するのにファイル名に日付を入れているのですが、
マクロで毎日のデータ保存を自動化したいと思い下記の様に自動記録してみました…

------記録されていたマクロ------
Sub Macro1()
ChDir "A:\"
ActiveWorkbook.SaveAs Filename:="A:\平成14年11月8日.xls", FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
End Sub
------以上------

このマクロを実行するとファイル名が"A:\平成14年11月8日.xls"となってしまいます。
 明日の9日には"A:\平成14年11月9日.xls"という様に別のファイル名で保存したいの
ですが良い方法は無いでしょうか?
 特に「平成XX年XX月XX日」にはこだわりませんので、ファイル名が重複しなければ
構わないのです。

何処かのセルに「=TODAY()」関数(表示形式=平成14年11月8日)を入れておきそのセル
をファイル名に使うようにするとか…

どなたか、御教示頂けないでしょうか。。。
385玩具:02/11/08 22:38
大人の玩具激安販売!!
ピンクローター190円!!
その他商品どこよりも安いですよ!
http://www.king-one.com/
>>384

Sub savebook()
Dim saveName As String
 saveName = "A:\" & Format(Date, "ggge年mm月dd日") & ".xls"
 ActiveWorkbook.SaveAs saveName
End Sub
>>382

ピボットテーブルで出来ない事なのか?
388382:02/11/09 00:55
>>387
手作業でやるなら、ピボットテーブルは真っ先に選択肢に
あがるのですが・・
検索条件をセルに入力してボタンを押すとクロス集計して、
その項目を使ってさらに計算をしたいのです。
389名無しさん@そうだ選挙にいこう:02/11/09 08:52
データをソートするときにアルファベット順や数値順じゃなくて、
自分で比較する関数をつくってソートできないでしょうか?
390384です。:02/11/09 11:06
>>386
 完璧です、有り難う御座います。
早速ボタンを作りました。
391超初心者:02/11/10 17:07
C列からL 列にある100個のデータの平均をA列に
出力したいんですが下のマクロではエラーがでます。
下から2行目がおかしいと思うのですがどう直したら
いいんでしょうか?ご教授お願いします。


For i = 1 To 100

Cells(i , 1).Select

ActiveCell.FormulaR1C1="=AVERAGE(Range(Cells(1 , 2+i),Cells(10 , 2+i)))"

Next i
>>391
オブジェクトはワークシート関数の中じゃ使えないよ
だから
ActiveCell.Formula="=AVERAGE(" & Range(Cells(1 , 2+i),Cells(10 , 2+i)).Address & ")"
こんな風にしないとダメなんだけど・・・

もしかして
For i = 1 To 100
Cells(i,1).Formula="=AVERAGE(C" & i & ":L" & i & ")"
Next i
ってしたいんじゃ?
393357:02/11/10 19:00
>>391

For I = 1 To 10

Cells(I, 1).Select

ActiveCell.FormulaR1C1 = "=AVERAGE(Range(Cells(1 , " & 2 + I & "),Cells(10 , " & 2 + I & ")))"

Next I
わざわざコードを書く理由は…単に学習中ということなのかな
395391:02/11/10 21:55
>>392 >>393
ありがとうございました。392さんの上の式できちんと動きました。
>オブジェクトはワークシート関数の中じゃ使えないよ
勉強になりました。これからも精進します。
396名無しさん@そうだ選挙にいこう:02/11/11 00:08
エクセル95で作った、VBA(マクロ?)が
エクセル2000でうまく動作しません。
どういう問題があるのでしょうか?
397 :02/11/11 00:09
398名無しさん@そうだ選挙にいこう:02/11/11 00:30
>>396
どの部分が動かないのでしょう?
オブジェクトの体系や仕様が変更されているので、動かないものが若干あります。
特にダイアログのコントロールやグラフ周り。
また、WorksheetをMoveすると、そのワークシートのオブジェクト変数がインスタンスを見失うというバグらしきものもあります。
399396:02/11/11 02:06
>>398
他人が作ったものなのでソースをあまり見ていないのですが
>特にダイアログのコントロールやグラフ周り。
>また、WorksheetをMoveすると、そのワークシートの
>オブジェクト変数がインスタンスを見失うというバグらしきものもあります
まさに関係しています。
どうやら修正しないといけないみたいですね。
回答、ありがとうございました。
VBAマクロを使用した業務計算で
どうしても結果がおかしい為動作を追ってみると、
i = 4.5
として、それを丸める(四捨五入)する部分で
round( i )
の結果が4になっているらしいのです。
仕方なく
Application.WorksheetFunction.Round( i , 0 )
として修正したのですが、
VBAとワークシート関数で動作が違うのは仕様なのでしょうか?
401400:02/11/11 15:27
あ、ちなみにExcel2000 SR-1です。
403400:02/11/11 18:06
ぐはっ
マジで仕様だΣ(゚Д゚;)

ひどいよぅ…そんなのヘルプにまったく書いてない……。・゚・(ノД`)・゚・。

404 :02/11/12 11:21
エクセルのブックをカンマ区切りのCSVにして保存したいのですが、
シートが複数ある場合、ブックをまるごとCSVに変換して保存って
普通の使い方だと出来ないですよね??
VBAを使えば出来るものなのでしょうか?
もし可能ならチャレンジしてみたいと思います。
405:02/11/12 21:48
>404
普通の使い方っていうのがよくわかりませんし、
私自身知りませんが、VBAなら可ですよ。
>404

VBAで出来るかって意味が、複数シートを持つCSVファイルを
作れるかって意味なら不可能。

1シート1ファイルなら、こんな感じで可。

Sub aaa()
Dim ws As Worksheet
 For Each ws In ActiveWorkbook.Worksheets
   ws.SaveAs FileName:="C:\WINDOWS\デスクトップ\" _
          & ws.Name & ".csv", FileFormat:=xlCSV
 Next ws
End Sub
407404:02/11/14 11:25
>405
普通の使い方=マクロとかVBAとか使わないっていう意味です。
初心者なので(汗)

>406
ありがとう!完璧です!
ついでにもうひとつ質問させてください。
複数のシートを持つブックのデータ
をシートごとにでなく、全てのシートひとつのCSV
にまとめて出力することって出来ますか?
408じゃっく:02/11/14 15:35
>>407
1.すべてのシートをひとつの(仮の)シートにコピペしてからCSVで保存
2.シートごとにCSV保存してからそれらのファイルをひとつに結合

どっちも手作業またはVBAで可。
2の結合ではDOS窓でcopyコマンドが使える。
[ツール]-[マクロ]-[新しいマクロの記録] から勉強してみそ。
409名無しさん@そうだ選挙にいこう:02/11/14 20:57
一つ教えてけろっぴ。
ワークシート上で、例えば列Eのセルに書き込んでエンターキーを押せば、
必ず一つ下の行でC列のセルに移行するというプログラムを組んでるが
わからんち。。。
教えてけろ・・・打ち込み作業なのでマウスで戻るのが面倒・・・。ぁぅ
410名無しさん@そうだ選挙にいこう:02/11/14 21:55
>>409
質問の意味が良くわからんけど、
C4に入力→[TAB]キーでD4に移動→
D4に入力→[TAB]キーでE4に移動→
E4に入力→[Enter]キーでC5に移動→...
ではいかんの?
411406:02/11/14 21:56
>407

1.同一ブック内の全シートを対象にしている。(このブックにソースを仕込む)
2.全部シートとも同じ列数(行数は不問)で、1行目はタイトル行。
3.テキトーなエラー処理しかしてない。

Sub bbb()
Dim wb As Workbook, r As Range, ws As Worksheet, Cnt As Integer
 Set wb = Workbooks.Add(xlWBATWorksheet)
 Cnt = 0
 For Each ws In ThisWorkbook.Worksheets
  ws.Activate
  If Cnt = 0 Then
   Set r = ws.UsedRange
   r.Copy wb.Worksheets(1).Range("A65536").End(xlUp)
  Else
   With ws.UsedRange
    Set r = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
    r.Copy wb.Worksheets(1).Range("A65536").End(xlUp).Offset(1, 0)
   End With
  End If
  Cnt = Cnt + 1
 Next ws
On Error GoTo ERR:
 wb.SaveAs FileName:="C:\WINDOWS\デスクトップ\" _
  & wb.Worksheets(1).Name & ".csv", FileFormat:=xlCSV
 wb.Saved = True
 wb.Close
ERR:
 Set wb = Nothing
End Sub
412409:02/11/14 21:57
>>410
説明が下手ですまんです。
貴方の書き込んだ内容をそのまま利用すると・・・
E4に入力してエンターしたら、C5に移る様にしたいんです。
413406:02/11/14 22:01
>>412

マルチうざいぞ。
>410の方法で出来る、少しは考えろ。
414409:02/11/14 22:08
>>413
オマエモナー
俺は必死なんだ。
ひたすらセルに打つ込む作業において、少しでも時間短縮を
目指しているの。作業が早く進めばそれだけ納入が早く済むし。
415名無しさん@そうだ選挙にいこう:02/11/14 22:16
>>409
おまえ日本語わからないのか?
紙のような410が教えて下さったんだからウセロヤ
>>414

Excel総合相談所8
http://pc.2ch.net/test/read.cgi/bsoft/1033983470/

こっちで教えてやる。
417名無しさん@そうだ選挙にいこう:02/11/15 13:42
エクセル出作ったユーザーフォームの中のテキストボックスに
コマンドボタンで作業を行った後フォーカスを合わせるのってどうやればいいんだろ
418質問です:02/11/15 13:59
XPのエクセルでアドインを使って分析ツールを組む込み、
そのツールをマクロを使って作業しようとすると
「ファイルが見つかりません。ファイル名、保存場所を確認しろ」
とでるので、確認したらきちんとファイルはありました。
検索したファイルをクリックするとマクロは動くのですが
保存してもう一回開くと同じ現象が起きます。

どうすれば正常になりますか?おしえてください。
>>417
TextBox1.SetFocus
420417:02/11/15 16:59
それだとエラーになるのよね
アクセスのVBAならそれで問題ないんだけど
421419:02/11/15 17:03
>>420
どのタイミングでどういうエラーが出るのよ。
うちの環境じゃ普通に動くが(Win2k/Excel2k)
422417:02/11/15 17:18
えっとね。
win2kのExcelXP
でどこでエラーが出るかというと
TextBox1.SetFocus
の行で黄色くなってとまるのよ
エラーのメッセージは忘れてしまったけれど
TextBox1がないとかいうお馬鹿なことはしてないんだ
もう少し自分で考えてみる、もしかしたらこの行の . と , を違えてるかもしれない。
423419:02/11/15 17:21
>>422
.Enabled = False や
.Visible = False だと
エラー出るからその辺もチェックしれ (´ー`)
424名無しさん@そうだ選挙にいこう:02/11/16 16:25
マクロまたはVBA使うと(それ以前の状態に戻す)
元に戻すが使えなくなってしまうのですが、
どうにかならないんでしょうか?
もしくはこれを可能にするソフトってあるんでしょうか?
>424

どうにもならない。
作業途中に世代バックアップでも取っておくしかない。
426名無しさん@そうだ選挙にいこう:02/11/20 01:37
OS・Excelともにバージョンは98です。
F3:F250の範囲に文字列が入力されているセルがあれば1に置換え、
同じようにG3:G250の範囲の文字列が入力されているセルには2を置換えるコードを書きました。

Range("F3:F250").SpecialCells(xlCellTypeConstants, xlTextValues).Value = 1
Range("G3:G250").SpecialCells(xlCellTypeConstants, xlTextValues).Value = 2

…が、必ずしも毎回文字列が入力されているとは限らないので、
エラーが起きないよう「IF…Then…Else」ステートメントを使って条件分岐しようとおもうのですが、
「F列に文字列が入力されたセルがある場合」というコードの記述の仕方がわかりません…。
すみません、どなたかお分かりになる方がいらしたら教えていただきたいです…困っています。
よろしくお願い致します。
>>426

On Error Resume Next
Range("F3:F250").SpecialCells(xlCellTypeConstants, xlTextValues).Value = 1
Range("G3:G250").SpecialCells(xlCellTypeConstants, xlTextValues).Value = 2

で良いのでは?
428じゃっく:02/11/20 11:39
>>426

Dim oCell As Range
For Each oCell In Range("F3:F250")
If oCell.Value <> "" Then oCell.Value = 1
Next
For Each oCell In Range("G3:G250")
If oCell.Value <> "" Then oCell.Value = 2
Next

視点がちょっと違ったかな?
429426:02/11/20 20:54
>>427>>428
ありがとうございます〜!
428さんの方法も考慮にいれていたので、おふたりからそれぞれの方法を伺うことができ、
本当に、本当に助かりました(涙)。
ご親切に感謝しています、ありがとうございました。

さあ、がんばって続きを作成します!
430名無しさん@そうだ選挙にいこう:02/11/25 18:17
VBAのヘルプ ウザ過ぎ
「なんでイチイチEXCELの画面を小さくするんじゃぁゴラァ」
と画面に吼えてしまう今日この頃
431名無しさん@そうだ選挙にいこう:02/11/25 22:28
OS・Excelともバージョンは98です。
締め切り直前でバグが見つかりました。どなたかヘルプをおながいできないでしょうか…(号泣)

A列のセルにデータを入力すると指定のセルに日付を表示させるコードを書きました(下記)。
入力の際「Enter」を押せば指定のセルに日付が表示されるのですが、
入力時に「Tab」を押してしまう可能性も出てきたため(その場合は当然アクティブセルの位置も変わるので日付表示の位置がずれる)、
「Tab」を押した場合でも条件分岐をして指定のセルに日付を表示させたいのです。
アクティブセルが下に移動するか横に移動するかのコードが判ればできそうなのですが…。
申し訳ありません、ご存知の方、何卒お助けくださいまし。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address <> "" And Target.Column = 1 Then
ActiveCell.Offset(-1, 14) = Date
End If

End Sub
432名無しさん@そうだ選挙にいこう:02/11/25 22:40
初めまして。質問させてください。

中堅企業の経理で働いています。最近、パソコンに詳しい男性が突然
辞めてしまって、部署でVBAを使える人がいなくなってしまいました。
情シス部の人に教えてもらおうにも、相手も忙しくていちいち質問に
答えてもらえません。マクロが書いてある資料がたくさんあるのに
なんのことかさっぱり分からなくてお手上げ状態です。

事実上業務を引き継いだのが私なので、こうなったらVBAなるものを
習得するしかないと悟ったのですが、みなさん最初は学校のような
所に通われたのでしょうか?私はエクセルは毎日普通に使っていて、
社内の上級研修までは済んだのですが、マクロは一切やったことが
ありません。年度末の決算資料作成に間に合うように、VBA使いに
なりたいのですが、どなたかアドバイスを下さい、お願いします。
>431

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
 For Each r In Target
  If r <> "" And r.Column = 1 And r.Row <> 1 Then
    r.Offset(-1, 14) = Date
  End If
 Next r
End Sub
>>432

自動記録
>>432
VBAヘルプをインストールする。
新しいマクロの記録で動作をトレースしてコードの内容をヘルプを見ながら確認。
Q&Aサイトをここを含めていくつか回ればわざわざ習いに行かなくても大体のことはわかる。
でもマルチポストはきらわれるのでやっちゃだめだよ。
436名無しさん@そうだ選挙にいこう:02/11/25 22:57
>>432
http://www.moug.net/index.htm
このサイトと、そこで申し込めるメーリングリストがいいと思う。
最初の頃はかなりお世話になったし、今でもお世話になってるよ。
あとは自分に合った本を探して買おう!
437名無しさん@そうだ選挙にいこう:02/11/26 00:08
こんにちは。乱数の発生について悩んでいます。
@統計的バラツキ(標準値nを基準とした標準偏差σに基づく分布)をもった
 ある一定の範囲内の乱数を発生させることができますか?
AAとBの二つの値がありAもBもある数値の範囲内で、
しかも[A−B]<Xとなる条件に基づく乱数A,Bを発生させることが出来ます
か?
B条件付書式で3つ以上の振り分けをしたいときどうすればいいですか?
こういうのはエクセルでは不可能?

社内の上級研修でVBAは教わってないのか?
どこが上級なんだよ。
439432:02/11/26 01:01
ありがとうございます。みなさんすごく親切で感激しています!

>>434 さん
なんの事か最初分からなかったのですが、なんとなく分かりました。
作業を覚えてもらうんですよね・・・?ありがとうございますやってみます。

>>435 さん
そのヘルプのインストールからやらないとダメな状況です。
明日朝一で入れます。ヘルプ見れば、コードの内容が分かるんですね!
それすら知らなかったです。すごく助かりました。ありがとうございます。
それからマルチポストはダメですね、覚えました

>>436 さん
早速見てきました!エクセルVBAと一般に申し込もうと思います。
本も明日探します!嬉しいですありがとうございます。

>>438 さん
ここのみなさんから見れば、レベルが低くてびっくりしますよね。
うちでは、電源を入れるのから始めるのが初級なんです。
上級ではピボットテーブルが限界なんです。古い会社で恥ずかしいですが。
でもがんばります。
440名無しさん@そうだ選挙にいこう:02/11/26 02:06
突然ですがMaskEdBoxコントロールには、
textAlignプロパティなる物は存在しないのでしょうか?
vbCenterにしたいのにどうしても出来ません。困り果てています
誰か知っている方、お教えください・・・一生のお願いです。
441名無しさん@そうだ選挙にいこう:02/11/26 08:03
>>432
>>438にもレスしてるのが気に入った。
今は初心者でもやる気があればどうにでもなる。
頑張れ。
442らくだ:02/11/26 11:55
どなたかお助けください。

VBA自体のフォントがおかしいです。斜体みたいなのでつぶれてます。
コマンドの所はツールで設定できますが、アプリケーション自体のフォントがおかしい。

どなたか教えてください。Exel2000です。
443名無しさん@そうだ選挙にいこう:02/11/26 13:00
>>442
Office2000のバグです。
以下のMSのサイトに修正ファイルがあります。

http://office.microsoft.com/japan/downloads/2000/O9VBEupd.aspx
444名無しさん@そうだ選挙にいこう:02/11/26 13:26
ユーザーフォームにテキストボックス1~4を作ってコマンドボタン(開始)を
作ったのですが、開始を押すとpcがフリーズしてしまいます。
いったいなぜでしょうか。また、要は、テキストボックスに何も書き込まれてないものがあったら
マクロをはじめないで注意文を出すようにしたいのですがもっと簡潔なヤリカタなどありましたら教えてください。
  s = TextBox3.Text
w = TextBox2.Text
a = TextBox1.Text
組成 = TextBox4.Text
Do Until s = True
If s = "" Then
MsgBox "Input cell [number]!"
Exit Sub
End If
Loop
Do Until w = True
If w = "" Then
MsgBox "Input cell [constant]!"
Exit Sub
End If
Loop
Do Until a = True
If a = "" Then
MsgBox "Input cell [name]!"
Exit Sub
End If
Loop
Do Until 組成 = True
If 組成 = "" Then
MsgBox "Input cell [composition]!"
Exit Sub
End If
Loop
445らくだ:02/11/26 13:50
>>443
ありがとうございました。治りました。
446bloom:02/11/26 14:58
447じゃっく:02/11/26 15:00
>>444
なんで Do〜Loop でくくってあるの?
特に理由がなければ Do および Loop で始まる行を
すべて削除(コメントアウト)してしまえば期待している
動きになると思うが?
448444:02/11/26 15:15
なるほど。じゃぁ
If s Or w Or a Or 組成 = "" Then
MsgBox "date is NOT accurate"
Exit Sub
End If
はどうしてエラーがでるんですか?
また、ユーザーフォームってのは標準モジュールのときみたいにツールバーに登録して直接起動できないものなのですか?
449名無しさん@そうだ選挙にいこう:02/11/26 16:02
>>448
> If s Or w Or a Or 組成 = "" Then
この条件式が間違い。

> また、ユーザーフォームってのは標準モジュールのときみたいにツールバーに登録して直接起動できないものなのですか?

フォームを開くコードを標準モジュールに書いて、それをボタンに割り当てる。
450444:02/11/26 16:08
では
If s= "" Then ・・・・endif
を繰り返すしかないと?

451448:02/11/26 16:52
>>450
> If s Or w Or a Or 組成 = "" Then

If s= "" Or w= "" Or a= "" Or 組成 = "" Then
452449:02/11/26 16:53
>>451
448じゃなくて449ですた。
453444:02/11/26 17:04
解決です。
感謝。
454じゃっく:02/11/26 18:38
>>444 ちょっとおせっかいになるけど…

そもそも >>444 のコードはボックスごとに空文字列かを調べて、
それに従ってメッセージボックスに表示するメッセージも変えた
かったんじゃないの?そうでなければ…

If s & w & a & 組成 = "" Then

という構文が可能。And じゃなくて & を使っている理由とか、

> If s Or w Or a Or 組成 = "" Then

がなぜ間違いなのかを調べておいたほうがいいと思うよ。
多分また同じような間違いをすると思うから。
>>444

Private Sub UserForm_Initialize()
 TextBox1.ControlTipText = "[number]"
 TextBox2.ControlTipText = "[constant]"
 TextBox3.ControlTipText = "[name]"
 TextBox4.ControlTipText = "[composition]"
End Sub

'-------------------------------------------------------------
Private Sub CommandButton1_Click()
Dim tBox As Control
For Each tBox In UserForm1.Controls
 If tBox.Name Like "TextBox*" Then
  If tBox.Text = "" Then
    MsgBox "Input Cell " & tBox.ControlTipText & " !"
    Exit Sub
  End If
 End If
Next tBox
MsgBox "OK! No Problem"
End Sub
456444:02/11/27 00:33
>>447 & 449 & 451 & 454 & 455
あなた方は神だ。
早速調べてみよう。
457名無しさん@そうだ選挙にいこう:02/11/27 10:47
エクセル初心者です
ユーザーフォームの設定で%表示ができません
小数点表示になってしまう
これはどこで表示属性の設定をすれば良いのでしょうか
458名無しさん@そうだ選挙にいこう:02/11/27 11:30
文字列として表示Sるのでしたら[']を最初にいれてください。
459名無しさん@そうだ選挙にいこう:02/11/27 12:20
Private Sub TextBox13_Change()
With Worksheets("予算")
TextBox13.Value = Format(.Cells(69, 2).Value, "#%") '%
End With
End Sub
予算というワークシートの69行2列目をユーザーフォーム
のテキストボックス13に%で表示したいのだがこれだと
ダメなんです
460じゃっく:02/11/27 12:35
>>459 ’%’が全角になってない?
461404:02/11/27 16:38
>406
めちゃレスおそでスマソX1000です。
完璧な解答ありがとうございます!!
あなたは真の神!!
462431:02/11/27 22:38
>>433
ありがとうございます、完璧に動作しました…(涙)。
Activecellではなく、TargetAddressを基点にすればいいのですね!
初心者につき、ついついActivecellに頼りがちなんです…また一つ勉強になりました。
ご親切にお応えできるよう、今後も精進致します。
本当にありがとうございました。遅レスをお許しくださいませ。
463うい:02/11/29 01:22
こんばんわ VBA初挑戦なんですが
テキストファイルを
数字のファイル名の小さい順にブックとして開き
その後のデータ処理までさせたいのですが

例えば、
0.txt →処理
0.5.txt →処理
0.9.txt →…
1.5.txt




どのようにすればと、、悩んでます。
どなたか良い知恵をご教授ください
464名無しさん@そうだ選挙にいこう:02/11/29 01:41
>>463
情報が少なすぎ。。
465うい:02/11/29 02:59
>>464
うーむ。。(´-`).。oO( どこだろう…)

タブ区切りのtxtファイルをブックとして開き、
そのB列C列にある数字のAVERAGE(B20:B1020)と
(C20:C1020)を求め
新しいBook1を開き、
B列C列にそのAVERAGE値を
ファイルNoが小さい順に、上から収めていきたいのです。
Noの数、値は未定です。

(Book1)
A列 B列 C列
ファイルNo 平均1 平均2
0 … …
0.5 … …
0.9 ↓
1.5

466名無しさん@そうだ選挙にいこう:02/11/29 13:44
>>465
ファイル操作の問題だね。
ファイル名の文字列を解析して開いてやればいいでしょ。
Office2000以上ならFSOオブジェクトを使ってファイル操作してみ。
467名無しさん@そうだ選挙にいこう:02/11/29 14:42
ども、BSじゃなくム板に行くべきだったか?と思ったら上にあったんでたすかりました。

質問:Excel2000のセル入力 a@com[Enter] で、自動にハイパーリンクされない手段ありませんか?

文字データとして入力させるだけなのにリンクが貼られると誤入力の直しがつらい
さらに「ハイパリンクの削除」を行うと書式が変更、罫線の上が無くなります。
原因はスタイルにハイパリンクがあること、しかもこれ、スタイル削除しても自動で作ります。

問題なのは、間違いでクリックするとメーラが起動されることと
マクロで0文字を代入するだけでセルクリアすると、次に AAA と入力してもリンク表示、
しかしクリックも右クリックから削除も出来ない状態に。

無理矢理対処するにはセルチェンジイベントで、
リンク削除 → 書式クリア → あらかじめ用意しておいた別セルから書式だけコピー
以外に方法がない。

 □ 自動的にハイパーリンクの作成を行う。
チェックボックスないですか? 長々御無礼
468名無しさん@そうだ選挙にいこう:02/11/29 14:53
>>465
dim fp as integer
dim rb as string
Shell "Dir /B/ON *.txt > _2ch.tmp"
fp=freefile()
open "_2ch.tmp" for input access read as #fp
do until eof(fp)
line input #fp,rb
call sub開いて平均計算して値コピーしてシート開放Proc(rb)
loop
close #fp
469うい:02/11/29 22:18
>>468
ありがとうございます。
がんばって理解してみます。
470名無しさん@そうだ選挙にいこう:02/12/02 09:02
字下げてすと

if hoge=3 then
<br>msgbox "hage"
end if
471名無しさん@そうだ選挙にいこう:02/12/02 09:13
If hoge Then
a = 1
End If
472名無しさん@そうだ選挙にいこう:02/12/02 09:16
汚してスマソ
どうやたららインデントが入るのじゃ?
知ってる人教えてください。
おながいします。
>>472
If hoge Then
    a = 1
End If
&nbsp;でいつも入れてるけどな
474名無しさん@そうだ選挙にいこう:02/12/02 11:57
>>472
インデントを入れるってVBAのスクリプト内でのことか?
それならインデントを入れたい業の頭でタブキーでいいと思うが
475名無しさん@そうだ選挙にいこう:02/12/02 12:32
>>468
勉強になります!サンクスコ!
476名無しさん@そうだ選挙にいこう:02/12/02 13:59
If Sheets("Sheet1").Cells(i, 1).Value = "ほにゃらら" Then
  Sheets("Sheet2").Cells(i, 2).Value = Sheets("Sheet1").Cells(i, 2).Value
End If

という風にしてSheet1から必要なセルだけをSheet2に移動させようとしてるのですが、
If 〜 Thenの行で「実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。」
と出てしまいます。何がいけないのか教えてください。
よろしくお願いします。m(__)m
477名無しさん@そうだ選挙にいこう:02/12/02 15:14
>>476
そのままで動作するはずだけど?
478470〜472:02/12/02 15:16
再テスト

if hoge then
<nbsp;> a=1
479470〜472:02/12/02 15:18
if hohe then
< > hage

  hage
480名無しさん@そうだ選挙にいこう:02/12/02 15:19
>>478
if hoge then
a=1
end if
481名無しさん@そうだ選挙にいこう:02/12/02 15:20
本当だ。
インテンドできない・・・
482476:02/12/02 15:20
>>477 ってことは私のエクセルが壊れてるのかな…(;´Д`)
483470〜472:02/12/02 15:22
おおうまくいったみたいだ。472ありがとう。
再確認

If hoge Then
  Call hage 'スペース4個
End if
484名無しさん@そうだ選挙にいこう:02/12/02 15:23
>>482
シート名が間違ってたりとか単なるタイプミスとか、そういうのかも。
もう1回チェックしてみて!
485470〜472:02/12/02 15:30
スペースの数は倍入れないと駄目なのか?
ここをMSゴシックで見る人もいないだろうが。

123456789
  1
  2
  3
  4
  5
  6
486470〜472:02/12/02 15:32
123456789
   &;nbsp;4
487470〜472:02/12/02 15:38
やっと分かったよ。何度もすまなかった。
486は失敗だけど今度はしっかりスペース4個入るだろう
123456789
    4
488476:02/12/02 15:39
>>484
シートの名前とか変えてみたんですが、やっぱり同じエラーが出ました…
あと、デバッグモードでシート名部分を書き換えても、やっぱり黄色いハイライトが消えません…
全文書くとこんな感じです。

Sub Macro1()
  Dim i As Integer
  Dim j As Integer
  j = 0
  For i = 0 To 13000
    If Sheets("Sheet1").Cells(i, 1).Value = "datanum" Then
      j = j + 1
      Sheets("Sheet2").Cells(j, 1).Value = Sheets("Sheet1").Cells(i, 2).Value
    End If
  Next i
End Sub

これが標準モジュールのModule1に入ってます…
489476:02/12/02 15:41
>>488
ちなみにデバッグモードでハイライトされるのは6行目の
If Sheets("Sheet1").Cells(i, 1).Value = "datanum" Then
です。
おながいします。m(__)m
490470〜472:02/12/02 15:48
Sheets("Sheet1").Cells(0, 1)ってのはないよ。

For i = 0 To 13000は
For i = 1 To 13000じゃないのか?

491☆☆☆☆☆:02/12/02 15:54
492名無しさん@そうだ選挙にいこう:02/12/02 15:54
>>488
For i = 0 To 13000 → For i = 1 To 13000
それだと、j=j+1もいらない?

Sub Macro1()
  Dim i As Integer
  For i = 0 To 13000
    If Sheets("Sheet1").Cells(i, 1).Value = "datanum" Then
      Sheets("Sheet2").Cells(i, 1).Value = Sheets("Sheet1").Cells(i, 2).Value
    End If
  Next i
End Sub
493名無しさん@そうだ選挙にいこう:02/12/02 15:55
>>492
ごめん、間違えた。

Sub Macro1()
  Dim i As Integer
  For i = 1 To 13000
    If Sheets("Sheet1").Cells(i, 1).Value = "datanum" Then
      Sheets("Sheet2").Cells(i, 1).Value = Sheets("Sheet1").Cells(i, 2).Value
    End If
  Next i
End Sub
494476:02/12/02 15:59
>>490-492
わかりました!ありがとー!なんか凄く馬鹿な自分に鬱になりました…
495470〜472:02/12/02 16:34
インデントデスト。
vbeの置換でスペースを に変えてみた。

If hoge1 Then
    If hoge2 Then
        If hoge3 Then
            a = 1
        End If
    End If
End If
496名無しさん@そうだ選挙にいこう:02/12/02 18:14
誰か教えてください。
とても長い配列を作りたいんですが、
var = Array(〜)
が1024バイトを超えてしまって、かけないんですが、どうしたらいいでしょうか?
497名無しさん@そうだ選挙にいこう:02/12/02 20:01
試してないんですまんが、

Dim s As String
s="hogei,hoge2,hoge3,hoge4,hoge5........hoge10000"
var=Split(s,",")

では駄目か?

大体1024バイトを超えるようなのをシコシコと書くのも疲れると思うが、
セルに書いてVariantの配列にとりこむのでは駄目なのか?
498名無しさん@そうだ選挙にいこう:02/12/02 23:15
>>497
レスどうもです。最終的には配列使わないで、
Stringを211行に渡って定義してしまいました(汗
多分なんですが、そのやりかただと
s="hogei,hoge2,hoge3,hoge4,hoge5........hoge10000"
っていう行が1024バイトを超えちゃうんで、多分その時点で
エラーになると思うです。1024バイトの文字列を配列として
使えないんじゃなくて、VBAが1024文字以上の行自体を
受け付けないんです。
配列の中身はそれの一覧が改行されたテキストとして
手元にあったんで、改行を「","」にエディタで置き換えして
貼り付けようと思ってました。
>>495
いいかげん鬱陶しいんで、どっかのテストスレでやってくれないか?(´ー`)
500470〜472:02/12/03 17:49
>>499
須磨ソ。もう分かったからやらないよ。
漏れ以外にも知らんやついそうだから、少しはみんなのためになったんじゃないか?
502名無しさん@そうだ選挙にいこう:02/12/04 13:08
>>501
サンクスコ!
結局コード書かなきゃいけないのか〜。
503名無しさん@そうだ選挙にいこう:02/12/07 13:17
ExcelやWordに書き込みができません。
ツールバーの項目もクリックできませんし…。
バージョンは2002でOSはXPです。
解決策分かる方は教えて下さい。。
504名無しさん@そうだ選挙にいこう:02/12/07 14:27
EXCEl2000です。
一つのフォルダの中にたくさんのファイルが入っていて、
ファイルの中には3枚のシートが入っているのですが、
すべてのファイルの1枚目のシートと2枚目のシートと3枚目のシートをバラバラにしたいのです
可能ですか??
505名無しさん@そうだ選挙にいこう:02/12/09 00:08
うん
>>504
可能ダス。そんなのショッチュウやってるよ。
507441:02/12/09 09:21
教えてください。
二つのエクセルファイルのブックの中身で、重複するレコードものを消去する
方法ってありますか?
あれば、教えてください
508506:02/12/09 09:49
どうすればいいのでしょうか??
509名無しさん@そうだ選挙にいこう:02/12/10 00:27
>>506
コード書けってか?
510名無しさん@そうだ選挙にいこう:02/12/10 00:32
>>508
各ファイル名を取得して、WorkbooksでOpenして、各WorksheetをMoveかCopyしたやつのParent(Workbook)をSaveすればいいだけじゃん。
VBA知っていれば、これでもう組めると思われ。
知らなかったら、この名著を買って勉強すれ。
[開発者のためのExcel2000VBAプログラミングガイド]
 大村 あつし (著), 佐野 夏代 (著)
511名無しさん@そうだ選挙にいこう:02/12/10 00:36
>>507
レコードID番号を配列に読み込んで比較して重複するやつにフラグを立てればすればよかろう。
VBA知っていれば、これでもう組めると思われ。
以下、略。
512511:02/12/10 13:35
訂正:
レコードID番号を配列に読み込んで比較して重複するやつにフラグを立てて、そいつを削除すればよかろう。
TYPE型の配列が便利かも。
513名無しさん@そうだ選挙にいこう:02/12/10 17:39
>>508
熟練工でも、テストを含め、きちんとしたものを作るのに3時間は
かかると思いますね。
素人さんは5日やってもできないでしょう。
どっかの業者さんに委託したら?
514じゃっく:02/12/10 18:04
>>504 etc
俺だったら次のようなアプローチをとるかな…

1)フォルダの Excel ファイルの一覧をワークシートに作る。
2)一覧をたどりつつファイルをオープン、3)のサブルーチン
  を実行してセーブせずにクローズ。を繰り返す。
3)アクティブなブックをシートごとに新規ブックにコピーし、
  名前を付けて保存する。保存先はもとのファイルとは
  別のフォルダがいいだろね。

 以上、ネット上に散らばってるサンプルコードなどを集めて
調べれば、そんなに難しいことではないと思うが、>>504
VBAを使って今後も仕事するつもりがないなら、>>513
言う通り。
>504

マクロを仕込んだブックを対象フォルダに置いて実行。
エラー処理一切無し。

Sub aaa()
Dim fs As FileSearch, wb As Workbook, i As Integer
Dim FName As String, FPath As String

FPath = ThisWorkbook.Path
Set fs = Application.FileSearch
fs.NewSearch: fs.LookIn = FPath :fs.FileName = "*.xls"
If fs.Execute > 0 Then
 For i = 1 To fs.FoundFiles.Count
  If Dir(fs.FoundFiles(i)) <> ThisWorkbook.Name Then
   Workbooks.Open (fs.FoundFiles(i))
   Set wb = ActiveWorkbook
   FName = Mid(Dir(wb.Name), 1, Len(Dir(wb.Name)) - 4)
    For j = 3 To 2 Step -1
     wb.Worksheets(j).Move
     ActiveWorkbook.SaveAs (FPath & "\" & FName & "_" & j & ".xls")
     ActiveWorkbook.Close
    Next j
   wb.SaveAs (FPath & "\" & FName & "_1.xls")
   wb.Close
  End If
 Next i
End If

End Sub
516名無しさん@そうだ選挙にいこう:02/12/11 12:07
>>515
グッジョブ!お疲れ様です。
業務用としてなら、エラー処理組み込まないといけないから
コードが5〜10倍くらいに膨れてしまいますね〜。
517507:02/12/11 17:05
>>515
ありがとう御座います。。
本当に助かりました。ちゃんと勉強してきます。。
518515:02/12/11 20:37
>516

5〜10倍、、、そんなにはならんだろ。

シート数が3枚じゃなかったら処理しないってのと
On Error GoTo くらい入れとけば十分実用に耐えると思うが。
519515:02/12/11 20:37
>>517

504=507?
520517:02/12/12 11:56
ごめんなさい。別人さんです。。504でした。。
521名無しさん@そうだ選挙にいこう:02/12/12 23:22
GetOpenFilenameで、一番始めに開くフォルダを変更することはできますか?

一度、ファイルを選択すると
2度目に開くときには、一つ目のファイルのあったフォルダが開くので
可能そうだなぁとは、思うのですが・・・方法がどうにもわかりません

検索キーワードでもいいので、どなたかご教授ください。
>>521
ChDir "c:\"
'ファイル開くダイアログの表示
If Not Application.Dialogs(xlDialogOpen) _
.Show(Arg1:="") _
Then Exit Sub
↑の方が良くない?
523名無しさん@そうだ選挙にいこう:02/12/12 23:50
>>522

目的の動作は
ChDirでできそうです。
ありがとうございました。


とある計測器の吐き出した
特殊な、拡張子のテキストファイルの"一部"をエクセルに取り込む
マクロを作っているのでGetOpenFilenameでパスをゲットしてReadしています
教えてください
一つのフォルダの中にたくさんのエクセルファイルがあって
ファイルは[全4枚のシートの保護]と[ブックの保護]がかかっています。
パスワードは共に123456
フォルダの中にある全てのファイルのパスワードを外せますか?
よろしくお願いします
>524

Excel総合相談所 9 の 292 は無視してマルチか?
526名無しさん@そうだ選挙にいこう:02/12/14 20:26
スレ違いでしたらごめんなさい。
あるブックをcsv(カンマ区切り)で保存すると各フィールドの間がカンマで区切られますよね。
各フィールドのデータをダブルコーテーションで囲んだ上で、カンマ区切りで
保存するにはどうしたらいいでしょうか?
例えばこんな感じで。
"0001","山田","太郎"
527名無しさん@そうだ選挙にいこう:02/12/14 22:07
>526
Write文使え
528526:02/12/15 00:08
>527
ソースをください、とかいったら怒りますか?
529名無しさん@そうだ選挙にいこう:02/12/15 09:02
>528
527ではないが、聞く前に調べたら?
下のはエラーチェックしていないんで、動くかどうかわからん。

Sub aho()
fd = ThisWorkbook.Path: fn = "\manko.csv": ff = FreeFile()
Open fd & fn For Output As #ff
With Sheet1
y = 1
Do While .Cells(y, 1) <> ""
x = 1
Do While .Cells(x, y) <> ""
Write #ff, .Cells(x, y);
x = x + 1
Loop
Write #ff, vbCrLf;
y = y + 1
Loop
End With
Close #ff
End Sub
530名無しさん@そうだ選挙にいこう:02/12/15 18:29
おせっかいだが、上を読みやすくしてみた。
Sub nbspaho()
    fd = ThisWorkbook.Path: fn = "\manko.csv": ff = FreeFile()
    Open fd & fn For Output As #ff
    With Sheet1
        Y = 1
        Do While .Cells(Y, 1) <> ""
            X = 1
            Do While .Cells(X, Y) <> ""
                Write #ff, .Cells(X, Y);
                X = X + 1
            Loop
            Write #ff, vbCrLf;
            Y = Y + 1
        Loop
    End With
    Close #ff
End Sub
531530:02/12/15 18:31
>>529
変数の宣言くらい白よ。
しないと上達が二年くらい遅れるぞ。
532名無しさん@そうだ選挙にいこう:02/12/15 19:00
>>530-531
本当におせっかいだな。
もともと、おせっかいがいるから成り立ってるスレですし。。。
534526:02/12/15 19:25
>527、529,530
レスありがとうございます。
Macのエクセル98で動かしているせいか、うまくいきませんでした。
いちばん近かったのは529さんのコードでした。
ソースをみてもちんぷんかんぷんでしたが、
これを機会に自分でもチャレンジしてみます。
535名無しさん@そうだ選挙にいこう:02/12/15 20:25
VBAチンプンカンプンならVBAなんてつかわずに

sheet2のA1に

= """" & Sheet1!A1 & """"

と入力してオートフィルで全部のセルに適用すりゃいいんじゃねーのか?
536名無しさん@そうだ選挙にいこう:02/12/15 20:36
Excel2000でVBAを用いてあるユーザー定義関数を作成し,
それをアドインファイルとして組み込ませました。

ワークシートのセル上で関数ウィザードを開き,
このユーザー定義関数を選択するとウィザードの説明欄に
『[ヘルプ]をクリックすると、この関数と引数に関するヘルプトピックが表示されます』
と表示されます。
他の関数では,この『』内にその関数の説明が表示されています。
(例)AND関数の場合『全ての引数がTRUEのとき、論理値TRUEを返します。』

自作したユーザー定義関数の説明を関数ウィザードで表示したいのですが,
どうすれば出来るのでしょうか?
学会の糞偽善者どもは、さり気なく情報を訊き出しては、
行く先々にあらゆる人材を送り込み、偶然を装っては
チンケな猿芝居やコザカしい罠、悪質な嫌がらせを次々と仕掛けてくる。
その、あまりにも回りくどく分かりにくい嫌がらせの手法で、
実際、気付くのに五年以上かかった。普通はまさか?と思うものだ。
だが偶然ではなかった。全て計画的に仕組まれたものだった。
あくまでも偶然を装ってである。何とも白々しく腹黒く悪質で陰険なことか!
こっちが気付かない、或いは知らん振りしてると、しつこく睨み続けてくる。
こっちが気付き不快感をあらわにすると、知らん振り。
頭にきて攻撃すると、散々自分から仕掛けて来ておきながら、
いかにも自分が被害者ぶるのである。
たとえ地元から遠く離れていても、である。
前以って嫌がらせを組織や会場にに潜り込ませたり、
あらかじめ通過地点に嫌がらせを配置・待機させる事もある。
一体奴らは何がしたいのか?気に入らないならダイレクトに来い!
被害妄想と思うかもしれないが、そうする事で
今までの不可解な出来事の全てにおいて、つじつまが合うのである。
偽善者という言葉は奴等の為にある。
学会のあるクソ信者と一緒にいると、
必ず初対面の人間からも頭ごなしに白い目で睨まれる。
明らかに年下の人間も俺を見下した目で見ている。
「あいつはロクでもないガキだ!」とでも吹いて回ってるんだろう。
表面上は親切ぶっていても、裏で糸を引いているのは奴等である。
正に偽善者と呼ぶに相応しい。
いつでも助けてやるよ!と言いながら、足を引っ張っているのは奴らだ!
偽善スマイルの裏では、腐ったはらわたがドス黒く渦巻いている。
学会の人間に心を開いてはいけない。
自分の知らない同一人物が目の前に度々現れたら要注意である。
538536:02/12/15 23:10
>>536 自己レス。
別の場所で回答を教えてもらってしまいました。
MacroOptionsメソッド を利用するそうです。
539526:02/12/15 23:19
>535
どうもです。
なるほど、そんな事もできるんですね。
でもそれだと用途がちがうんです。
ワンタッチで"aaa","bbb"・・・・形式にする必要があるんで。
540名無しさん@そうだ選挙にいこう:02/12/16 22:25
VBAから利用できるmsHogeHogeという組み込み定数があるとき、
文字列"msHogeHoge"からこの定数を導く関数又は方法にはどのようなものがありますか。
>>540
オブジェクトブラウザでも使ったら?
VBAのエディタで表示→オブジェクトブラウザ
542名無しさん@そうだ選挙にいこう:02/12/18 14:56
過去ログにある質問ならごめんなさい。
エクセルのシートを開くと同時に自動的に実行されるマクロ
を作成したいのですが、どのようにしたらいいでしょうか?
543名無しさん@そうだ選挙にいこう:02/12/18 15:07
Private Sub Worksheet_Activate()
を実行したいシートに。
544542:02/12/18 15:45
>>543
ありがとうございます。ちゃんと調べたらありました。
お恥ずかしい。
545名無しさん@そうだ選挙にいこう:02/12/21 02:07
WIN2000, EXCEL2002 です。
会社のシステムから(WEBを使って)データをダウンロードしたものを
エクセルに貼り付けて加工しています。(ダウンロード時はエクセル形式)

A列に数字 B列に日付が入るのですが数値としてではなく
文字列になっているようです。(元データの時点で)
そこで、
Sub 数値に直す()

'数値部分
Columns("A").Value = Columns("A").Value

'日付部分
RowN = Range("B1").End(xlDown).Row
'作業用列=C列
Range("C1").FormulaR1C1 = "=DATEVALUE(RC[-1])"
Range("C1").Copy _
Destination:=Range("C2:C" & RowN)

End Sub
という方法で今はなんとかやってるのですが
日付部分(B列)も数字(A列)のようなシンプルなやり方が
あれば教えて下さい。(物凄く困っている訳ではないのですが
シンプルな方法があるのでは・・・と思いまして。)
宜しくお願いします。

>545

上手く動くか解からんが。

Sub aaa()
Columns("A:B").NumberFormatLocal = "G/標準"
Columns("A:A").TextToColumns FieldInfo:=Array(1, 1)
Columns("B:B").TextToColumns FieldInfo:=Array(1, 5)
End Sub
>546 ありがとうございました。ばっちりでした。「区切り位置」を
使うと良かったのですね・・・(使ったことなかったです・・・)
色々と活用できそうです。ありがとうございました。
>>316
詳しくはわからんが、直接保存は出来ないみたい。

WorkBookをWeb形式で保存してから画像を抜き出せば一応できるみたいだ。
PublicObjectsコレクションのaddメソッド、publishメソッドあたりを調べてみたら?
ありゃ、恥ずかしいことしてしまった…鬱誌…
550|∀・) ...:02/12/26 15:31
 
551おしえてくん3号:03/01/06 09:44
みなさま、新年あけおめ
で、早速教えてくんで申し訳ないんだが。
定型作業をして、作業内容の主要事項を別のブックに書き込む、
このときに書き込むべきブックが
別の人間が開いていた場合に編集が可能になるまで待つコード教えて
552おしえてくん3号:03/01/06 14:41
>>551
のコードは自力解決しました。
553名無しさん@そうだ選挙にいこう:03/01/10 14:21
横スクロールしてもスクロールされない列になるようにするのには
どうすればいいのでしょうか。
そういうコマンドもしくはコードを教えてください。
1行目縦スクロール禁止は
Range("B2").Select
ActiveWindow.FreezePanes = True
だとは知ってるのですが。。。

554名無しさん@そうだ選挙にいこう:03/01/10 14:29
>>553
マクロ記録したら?
555553:03/01/10 15:14
マクロ記録しようにも、スクロール禁止のボタンがわからんのですよ。
556名無しさん@そうだ選挙にいこう:03/01/12 17:31
エクセルのSUMIFで範囲、条件を2ペア使いたいのですがどうすればいいですか。
たとえば、この表で「田中」カツ「みかん」で15+22=37をしたいのです。
田中、みかん、15個
佐藤、りんご、30個
田中、みかん、22個
佐藤、りんご、10個
田中、りんご、21個
田中、りんご、17個
佐藤、みかん、25個
どうかよろしくお願いします。
557海やん:03/01/12 18:17
弥生販売ってソフトを使って、利益計算をしようと思ったのですが、
このソフトでは
あるお得意に対しての利益を把握することはできないですね。
分析するところがあって、お得意に対する販売の利益や利益率は
ボタンひとつででるのですが、この数字は、いたっていい加減なもんです。
在庫の単価は、仕入れた商品登録のところの価格を変えるたびに、
その新しい価格に変わってしまいます・・・・。
つまり、在庫品を売った場合の利益は、事実を反映してないです。

中央市場で使うつもりなので、毎日、同じ品目の野菜でも、
仕入れ価格は変わり、お得意さんへの売り価格も変わります。
こんな状況で、しっかり、お得意さんへの利益管理のできる
ソフトって、ご存知ないでしょうか??
558 :03/01/12 18:34
>>556
SUMIFてえ何だよ?
559 :03/01/12 18:49
>>556
Sub 寒いフ()
Dim ret As Long
Dim Vol As Long
Const NM_A As String = "田中"
Const FT_A As String = "みかん"

Vol = 0
For i = 1 To Range(Cells(1, 1), Cells(1, 1).End(xlDown)).Count
ret = IIf(Cells(i, 1) = NM_A, _
IIf(Cells(i, 2) = FT_A, CLng(LEFTCells(i, 3).Value), 0), 0)
Vol = Vol + ret
Next

MsgBox Vol
End Sub
560名無しさん@そうだ選挙にいこう:03/01/12 19:02
◆◇◆◇◆最新情報◆◇◆◇◆
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
561名無しさん@そうだ選挙にいこう:03/01/12 20:57
あの〜、請求書作りたいんですが、
  A    B
1山田政子 129200
2大島秀文 120150
3金田義弘 402379

と言うようなデータの後に下の方のページに
    A     B    C     D     E
70  =$A1             =$A2     
71 合計金額  =$B1*3      合計金額   =$B2*3
72 以上の通り請求します    以上の通り請求します
73
74  =$A3             =$A4     
75 合計金額  =$B3*3      合計金額   =$B4*3
76 以上の通り請求します    以上の通り請求します

と、1ページに2個ずつ請求書を作りたいのですが、これを自動でやるにはどうやれば・・
お願いします…これを60個分作らなきゃならないんですが、気が遠くなりそうで…
562名無しさん@そうだ選挙にいこう :03/01/12 21:21
>>561
>と、1ページに2個ずつ請求書を作りたいのですが、これを自動でやるにはどうやれば・・
>お願いします…これを60個分作らなきゃならないんですが、気が遠くなりそうで…

ふざけるな。その仕事が終わればいいだけなんだろ?
「別にエクセルなんていちいち調べずにネットで聞けば、どっかの暇人がやってくれるし。」
なんて思ってんだろ?
お前のような向上心の無い人間は社会の役に立たない。
会社なんて辞めちまえ!クズ野郎!
563名無しさん@そうだ選挙にいこう:03/01/12 21:24
>>562
くだらないこと書くな。
564562:03/01/12 21:24
>>561
マクロの記録を実行して、
まず、1個だけ間違えないように操作をマクロ記録する。

後はマクロをループさせてセルをずらすだけだ。
565sage:03/01/12 21:28
>562
3分でいい人になったな。(藁
566562:03/01/12 21:32
>>561>>563
やっぱ、氏ねよおめーら。
567名無しさん@そうだ選挙にいこう:03/01/12 21:37
>>562
うーむ、調べはしたんですがねぇ・・と、まぁそれは言い訳ですね・・・
ありがとうございました〜
568sage:03/01/12 21:37
>562
本当はいい人なのに悪びれてるんだろ?
シャイな不良と一緒だな。
569vvv:03/01/12 21:49
◆◇◆◇◆最新情報◆◇◆◇◆
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
570名無しさん@そうだ選挙にいこう:03/01/13 11:33
…うーむ、全然分からん…
マクロをループさせてセルをずらすって…一体どこをどうすれば…
571名無しさん@そうだ選挙にいこう:03/01/13 11:37
>>553
WorkSheetのScrollAreaプロパティで移動できる範囲を限定したらどうでしょう?
起動するたびに設定しなければいけないのが難点だけど(XL97ではそーだった)。
>>570
一例

Option Explicit
Sub HogeHoge()
 Dim lngI As Long, lngR1 As Long, lngC1 As Long
 For lngI = 1 To 60
  lngR1 = ((lngI - 1) \ 2) * 4 + 70 '行位置計算
  lngC1 = 4 - (lngI Mod 2) * 3    '列位置計算
  With ActiveSheet
   .Cells(lngR1, lngC1).Formula = "=" & "A" & lngI
   .Cells(lngR1 + 1, lngC1).Value = "合計金額"
   .Cells(lngR1 + 2, lngC1).Value = "以上の通り請求します"
   .Cells(lngR1 + 1, lngC1 + 1).Formula = "=" & "B" & lngI & "*3"
  End With
 Next
End Sub

Modとか\とかは演算子です。
573572:03/01/13 11:54
一部修正
「=」と「A(B)」を離す必要がなかったです。

= "=" & "A" & lngI  →  = "=A" & lngI
= "=" & "B" & lngI & "*3"  →  = "=B" & lngI & "*3"
574名無しさん@そうだ選挙にいこう:03/01/13 12:15
>>572
うーむ、わざわざすみませんです。ちょっとやってみます
575名無しさん@そうだ選挙にいこう:03/01/13 12:35
よくセルに「=A108」とか使いますよね。
たとえばの話ですが、「=A100」から「=A125」までを=A2に、
=A126から=A150までを=A3と言う風繰り返し置き換えしたいのですが
一体どうすれば…
>>575
570さんと同じ人?
A100〜A125にA2の値を参照させるのか
A2にA100〜A125の値を順次参照させるのか(そして印刷?)
どっち?
577名無しさん@そうだ選挙にいこう:03/01/13 15:05
ここで聞いてもよろしいでしょうか?
http://pc3.2ch.net/test/read.cgi/tech/1023755967/528-529
578名無しさん@そうだ選挙にいこう:03/01/13 15:55
同じっす・・・
「=A100〜A125」を参照しているセルを置き換えで=A2
を参照させたいんですが…
>>577
これでしょうか?
http://support.microsoft.com/default.aspx?scid=kb;ja;JP416637
向こうにも貼っておきます
580名無しさん@そうだ選挙にいこう:03/01/13 16:25
>>578
説明ヘタだな・・・
こんな処理でつか?
Sub hogehoge()
 Dim rng1 As Range, rng2 As Range, rng3 As Range, tf As Boolean
 On Error Resume Next
 Set rng2 = ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas)
 On Error GoTo 0
 If Not rng2 Is Nothing Then
  For Each rng1 In rng2
   On Error Resume Next
   Set rng3 = rng1.DirectPrecedents
   On Error GoTo 0
   If Not rng3 Is Nothing Then 
    If rng3.Count = 1 And rng3.Column = 1 Then '=A100*A120 や =A100*2 等は除外する
     If Application.WorksheetFunction.Substitute(rng1.Formula, "$", "") = "=" & rng3.Address(False, False) Then
      Select Case rng3.Row
       Case 100 To 125: rng1.Formula = "=A2"
       Case 126 To 150: rng1.Formula = "=A3"
      End Select
     End If
    End If
    Set rng3 = Nothing
   End If
  Next
  Set rng2 = Nothing
 End If
End Sub
582名無しさん@そうだ選挙にいこう:03/01/13 17:51
うーむ、オレにはバカ過ぎて分かりませんが、とりあえずそれ見て勉強し、
理解しようと思います。
ありがとうございました〜
583名無しさん@そうだ選挙にいこう:03/01/13 23:22
vbaの事を全然知らない人むけの解説書で、
何かいい本はありますか?
584仕様書無しさん:03/01/13 23:40
>>583
http://www.cbook24.com/

検索は「EXCEL VBA」
585577:03/01/14 09:53
>>579
!!!それです!!! ありがとうございます〜。
586577:03/01/14 10:10
・・・経過報告・・・

>>579さんが教えてくれたページで

>漢字変換を 1 文字ずつ行うことによって正常に変換することができます。
との記述を見つけ、ほっとしたのもつかの間。例えば「未払い」をどうやって
1文字ずつ変換するのか悩んでしまう。

「未」→「み」+変換→OK
「払」→「はらい」+変換→文字化け
再度挑戦
「払」→「はら」+変換→変換候補にでてこない(当然か・・・)
再々度挑戦
「払」→「ふ」+変換→変換候補にでてこない(まあ、当然か・・・)
今度こそ
「払」→「ふっ」+変換→変換候補にでてこない(ふっ、漢字力の無いオレには無理)
587577:03/01/14 10:16
・・・最終報告・・・

「払」→「ふつ」+変換→OK(さっきはなぜ小さい「っ」にしちゃったんだろう?)

とやってるうちに、メモ帳で変換した後でコピペした方が早いことに気づく。
ん?それだと以前と全く変わらんぞ。な〜んの解決にもなっていない。
IntelliPoint ドライバを外すしかないか・・・
588山崎渉:03/01/15 16:41
(^^)
589名無しさん@そうだ選挙にいこう:03/01/16 17:39
左のセルに数値を入力したら 右のセルに その入力時刻を表示させるのは
どうしたらいいのでしょうか?
new() は 使わないで。  再計算しちゃうから。よろしくお願いします。
590仕様書無しさん:03/01/16 20:45
>>589
jは、貴方が日付を入力したい列を指定

Private Sub Worksheet_Change(ByVal Target As Range)
Dim j As Long
j = 2

Cells(Target.Row, j) = Time
End Sub
591仕様書無しさん:03/01/16 20:50
うっ!既に答えが出ていたのか......
592名無しさん@そうだ選挙にいこう:03/01/16 22:50
>>590
なるほど!  たいへん参考になりました。ありがとうござます。
593名無しさん@そうだ選挙にいこう:03/01/16 23:11
すいませんが、朝6時になったら設定範囲を自動印字させて、セルA列のデータを全
クリアしてセル位置の「A1」にカーソルを移動するってできますか? 
怒らないでおしえてくださーい。
594名無しさん@そうだ選挙にいこう:03/01/17 00:18
>朝6時になったら
スケジューラあるいはATコマンドでVBスクリプトを登録

>設定範囲を自動印字させて、セルA列のデータを全
>クリアしてセル位置の「A1」にカーソルを移動するってできますか? 
マクロ登録しておいて、上のVBスクリプトからマクロを記録したエクセルの
インスタンスをCreateObjectで生成後、マクロ関数をコールするだけ。

楽勝ジャン
595名無しさん@そうだ選挙にいこう :03/01/17 00:35
>怒らないでおしえてくださーい。
てことは、恒常的に我々が怒っていると......
596名無しさん@そうだ選挙にいこう:03/01/17 06:18
594>>
なんとなく 意味はわかりました。 本日挑戦してみます。
ありがとうございます。
595>>
もしかしたら つまらない質問をしてしまったとの危惧から出てしまった
セリフなのです。
597アップ:03/01/17 07:09
     ∧_∧
    ( ´∀`)<http://www.boreas.dti.ne.jp/~keitarou/ten.html
    /,   つ
  ( ((_(_, )) )
     しし'
598名無しさん@そうだ選挙にいこう:03/01/17 16:03
589ですが 出来ました! と喜んだのですが 左セルの数値を削除しても時間がでちゃうんですね。 それは消せませんか?
>>598
B列を非表示にしてC列に =IF(A1="","",B1) ってな感じで記入すれば?
C列のセルの書式設定で表示形式を設定する必要あるけど
600名無しさん@そうだ選挙にいこう:03/01/17 17:14
Excel95からExcel2000に変換してVBAへ修正できて正常に動作していますが、
メニューバーの訂正ができません。
ファイルを立ち上げると前のメニューバーになります。
削除しても同じです。Excel95のメニュー作成方法が分からないので
不具合がどこにあるか見当もつきません。
601名無しさん@そうだ選挙にいこう:03/01/17 17:16
>>598
r.Offset(0, 1) = Time
 ↓
if r = "" Then
r.Offset(0, 1) = ""
else
r.Offset(0, 1) = Time
end if

ただこれでも、Wクリックでセルの中に入っちゃうと
内容が変わらなくても時刻が変わってしまうんだがね。
602590:03/01/17 18:39
>>598
消せますよ。
603名無しさん@そうだ選挙にいこう :03/01/17 19:04
>>601
Wクリック(F2も同じく)は現在のセルの値を同じセルに上書きすること
なので値を編集したことになる。
604名無しさん@そうだ選挙にいこう:03/01/17 19:14
>>600
ただ、現状報告してるだけで質問じゃないよね?
へー、大変だね。
605590:03/01/17 19:24
セルの編集モードになる前にセルの値をグローバル変数TEMPへ退避させて
アクティブセルが変わった時にTEMPと比較させるだけだよ。
いまコーディングして確認しました。

---------------------------------------------------------------
どうして自分で考えようとしないの?何も考えずに質問してるだけでしょ?
1週間くらい考えないと考えたうちにはいらないんだよ。あまりふざけないでね。
606名無しさん@そうだ選挙にいこう:03/01/17 19:36
http://www6.ocn.ne.jp/~endou/index2.html
     ★YAHOOOプロフィール★
607600:03/01/17 20:21
解決しました。
新規ブックにシートをコピー。
マクロはインポート。
それからメニューバーを作成。
608名無しさん@そうだ選挙にいこう:03/01/18 06:55
601>>
解決しました。
ありがとうございました。
今後もよろしくです。
609マクロいらん:03/01/18 10:49

初歩的な質問ですがお願いします。

マクロで作ったシートをマクロ抜きで相手に渡したいのですが何か簡単な方法はありますか?

今は新規のワークシートにデータ部分だけをコピーしてマクロなしのファイルを作っています。

もっとスマートで簡単な方法がありそうなものですが。

データが大量にあるので、ワンクリック程度ですませたいです。
610名無しさん@そうだ選挙にいこう:03/01/18 11:02
データファイルとマクロファイルを分ければ?
611マクロいらん:03/01/18 11:18
>610
 最初にそうすればよいのですが、マクロ付きのファイルがすでにいくつもできてしまい、元のデータは揮発性のため後戻りはできません。
 
612名無しさん@そうだ選挙にいこう:03/01/18 11:57
シートだけコピーして、新規ブックを作成するマクロを作ればいいのでは?
(personal.xlsに作ろう)
613名無しさん@そうだ選挙にいこう:03/01/18 12:35
毎日 同時刻に警告するマクロを組んだのですが
どうもうまく動作しません。ご指導よろしくどうぞ。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sub macro_kaisi()
Application.OnTime TimeValue("12:03:00"), "MyMsg"
End Sub


Sub MyMsg()
MsgBox "時間ですよ!"
End Sub
614マクロいらん:03/01/18 13:29
>612
レスありがとうございます。結局その方法しかなさそうですね。
それでやってみます。
615素人OL:03/01/18 15:36
初心者です。
質問させて下さい。

EXCEL200で複数のファイルで
同じ内容のセルだけを一度に
書き換えるにはどうすればよいですか?
616 :03/01/18 16:35
EXCEL200とは、如何に?

>複数のファイルで
>同じ内容のセルだけを一度に
>書き換えるにはどうすればよいですか?
質問は具体的に
617名無しさん@そうだ選挙にいこう:03/01/18 16:47
>615
置換と同じ動きをすればいいんですか?
618  :03/01/18 16:54
>>613
以下はThisWorkBookに
Sub Workbook_Open()
Application.OnTime TimeValue("16:51:00"), "MyMsg"
End Sub

以下は標準モジュールModule1に
Sub MyMsg()
MsgBox "時間ですよ!"
End Sub
619 :03/01/18 16:58
>>613
つーか、こんなしょーもない質問すんなよ。
いろいろ試せば出来るだろ
620素人OL:03/01/18 17:01
>616 >617

一つのフォルダにECXELデータがcsv方式(?)で何千個か有るんですよ。
その中で"A"と書かれているセルを全部検索して"B"に全部置換したいんですよ。
会社でそういうのをやれって言われたんですけど 出来るんでしょうか?

本当によく分かってないんでごめんなさい。
621 :03/01/18 17:05
へ?
CVSならエクセルとか使わずにワードパッドや秀丸で
「,A,」==>「,B,」に置換するだけじゃないの?
622621:03/01/18 17:05
CSV誤り
>620

それはそのファイルを自動で開いて自動で置き換えて…って動きをさせたいって事ですか?
624621:03/01/18 17:12
>一つのフォルダにECXELデータがcsv方式(?)で何千個か有るんですよ。
>その中で"A"と書かれているセルを全部検索して"B"に全部置換したいんですよ。

grepとsedで変換します。

Windowsのバージョンは?
95,98,Me,NT,2000,XP?
625素人OL:03/01/18 17:14
>620
そんなかんじですけど できませんか?

>621
ワードパッドや秀丸って知らないんですけど難しいいんですか?
626素人OL:03/01/18 17:18
>624
WINDOWSは98です
627621:03/01/18 17:24
以下のツールをダウンロードして、解凍後
それぞれの解凍フォルダ内のgrep.exe,sed.exeを
\Windows\SYSTEM32 フォルダへコピーして下さい。

grep
マルチバイト文字対応版 GNU grep, egrep, fgrep
http://www.vector.co.jp/soft/dl/dos/util/se008484.html

sed
マルチバイト文字対応版 GNU sed
http://www.vector.co.jp/soft/dl/dos/util/se008493.html
628621:03/01/18 17:25
>素人OL

>ワードパッドや
ネタ質問でしたか(ワードパッド知らないって)。
629621:03/01/18 17:32
Windows98にもワードパッドあるやん。
あー、しょーもねー煽りにのっちまった。
エクセル素人ではなくOLとして素人だと......
631素人OL:03/01/18 17:44
わけがわからないです。
ワードパッドってどこにあるんですか?
>631
あくせさり
>>631
>わけがわからないです。
わけがわからないです。

634名無しさん@そうだ選挙にいこう:03/01/18 18:21
>>633
同感です。
635621:03/01/18 18:25
遊び人OLに回答する気はしない。もう1月だから
昨年4月入社でも10ヶ月経ってる。何やってたの?

sedやgrep使わなくてもフォルダ内ファイルまるごとテキスト置換
するツールも有る。あえて紹介はしない。

>わけがわからないです。
>ワードパッドってどこにあるんですか?
じゃあな。
636名無しさん@そうだ選挙にいこう:03/01/18 18:30
メニューバーにmenuを次のように追加したい。
どのようにコーディングすれがいいのでしょうか?
menu
....menu-1
....menu-2
........menu-2-1
........menu-2-2
....menu-3

Sub AddMenuBar()
Const MenuType = "Worksheet Menu Bar"
Dim MainMenu As CommandBarControl
Dim SubMenu As CommandBarControl

Set MainMenu = CommandBars(MenuType).Controls _
.Add(msoControlPopup, , , , True)
MainMenu.Caption = "menu"

Set SubMenu = MainMenu.Controls.Add
SubMenu.Caption = "menu-1"
SubMenu.OnAction = "'menu-1'"

Set SubMenu = MainMenu.Controls.Add
SubMenu.Caption = "menu-2"
SubMenu.OnAction = "'menu-2'"
'''''''''''
'?????????
'''''''''''
Set SubMenu = MainMenu.Controls.Add
SubMenu.Caption = "menu-3"
SubMenu.OnAction = "'menu-3'"
End Sub
637名無しさん@そうだ選挙にいこう :03/01/18 18:34
>どのようにコーディングすれがいいのでしょうか?

http://www.moug.net/
>>637
........menu-2-1
........menu-2-2
ここをコンボを使った例はあったが、
使わない例はないかな?
640名無しさん@そうだ選挙にいこう:03/01/18 22:40
Private Sub Workbook_Open()
Application.OnTime TimeValue("04:59:50"), "バックアップ"
End Sub
上記のようなマクロを組みました。
これで毎日 朝4時59分50秒にバックアップをしてくれますか?
もちろん バックアップ記述はモジュールに組んであります。
641名無しさん@そうだ選挙にいこう:03/01/18 22:50
>>640
先に回答した者ですが、できません。
1回で終わりです。

そういうのはVBスクリプトファイルからマクロをコールします。
もちろんVBスクリプトはスケジューラに登録します。

努力を惜しむ香具師は氏ねよ。
>これで毎日 朝4時59分50秒にバックアップをしてくれますか?
マシンの時刻を1分戻してみるとかしてテストできるだろ。
それくらいのことも思いつかんのか?大丈夫かよ、お前。
643ゆうか ◆mcYUKA.SR6 :03/01/18 23:08
エクセルで折れ線グラフを作りました。
その折れ線の後尾から垂直に直線が降りています。
どうしても消せないのですが困っています。
どうか教えてください。
644636:03/01/19 00:06
Set m = MenuBars(xlWorksheet).Menus("menu-2-1")
m.MenuItems.AddMenu Caption:="menu-2-1"
できた
645名無しさん@そうだ選挙にいこう:03/01/19 00:24
642>>
ここのトップを読むと暴言は即連絡となってます。
退場。
>>645
 1.質問する時は丁寧に、教えてあげる時は偉そうに。

暴言というほどでなく、ただ偉そうに言ってるだけだから問題ないとおもわれ。
647ぶうびい:03/01/19 12:29
>>642 偉そう。
>>645 暴言。
>643
散布図じゃなくて折れ線でですか?
元のデータから図を再度作り直しても同じようになりますか?
あと、問題の部分のデータはどんなでしょうか
>643
今更気付いたが、そもそもスレ違いみたいだけど。
VBA使ってるんじゃないんだよね?
http://pc.2ch.net/test/read.cgi/bsoft/1042913355/l50
650ゆうか ◆mcYUKA.SR6 :03/01/19 17:34
>>649
ありがとう
651名無しさん@そうだ選挙にいこう:03/01/20 12:10
このスレの上の方でExcelVBA本には良書がない、と書かれてますが、
敢えて選ぶとすればどれがマシでしょうか?

当方の事情ですが、Excel2000使用、VBAはおろか、VBは全然知りません。
そのベースとなっている(らしい)Basicの文法は全く分かりません。
他方、CとPerlの最低レベル(入門書終了レベル)の知識はあります。
ので、例えば変数の意味や基本的なアルゴリズム程度は分かります。
Cについては、コンソールの使い捨てプログラムが書ける程度、Win32のAPIは
知らない、と言ったほうがいいレベルです。
全くプログラミングを知らない人向けの本は最初がつらいので、
多言語を多少知ってる人が新しくVBAに触れる、という想定で書かれた本が
希望です。該当する本がなければ、中級以上レベルより、全くの初心者向け本
の方がいいです。
当面の目的は、別ソフトで出力したcsvファイルのデータに数段階の加工を
加えて、帳票を出力することです。
よろしくです。
652名無しさん@そうだ選挙にいこう:03/01/20 12:27
>>651
釣り師ですか?
Cの最低限のことが判ればVBAなんぞ屁みたいなものと思うのですが・・・
取りあえず、エクセルの記録マクロで何か作業をして、
後でこのコードを読めば判ります。
VBAは、英単語を少し判るんなら、面倒なことは殆どないんですが・・・
いや、VBAの場合、ループを素直にfor i=……で回さないほうがいいとか、
大概の処理は専用の物があるのでそれを使うべしとか、
大量のプロパティやらメソッドに埋もれて訳がわからないとかそう言う事では?
分岐やらループの制御は解ってても、それ以外の比重がメチャ高いでしょ?>VBA

漏れは本買ってないが……他言語で基本の制御構造をマスターしてるなら
ネットの解説サイトととヘルプとmougと此処で済ませることも可能かと(w
>>653
>分岐やらループの制御は解ってても、それ以外の比重がメチャ高いでしょ?>VBA

てか、プログラミングの基礎的な事ができる人なら
このスレなどで既出の(VBAの)ソースコードを
コピペして動かせば、VBAなら
かな〜り熟達するでしょうが (#゚Д゚)ゴルァ!
655名無しさん@そうだ選挙にいこう:03/01/20 13:28
cがわかってるなら構文の違いはすぐ慣れるでしょ。
どれがオススメとか言えないけど、漏れのばやいは
Visual Basic for Excel 97 完全制覇(日経BP)
あとは自動記録のコード見て、冴子タンに訊いたり
2ちゃんROMったり。
656653:03/01/20 14:03
>654
だから、漏れ本買わずに済ませてるんだが……

651はまだ手をつける前の情報収集してるんだから、意を汲んでやってよ
657654:03/01/20 15:19
>>656
漏れも、あんたが書籍ageだとは言っていないのモナー

(;´ー`).。oO(「VBA本 逝ってよし」の仲間が増えた…)
>>651
Mougのオーナーの本も良いかも。
ただ全部そろえると諭吉が消えてしまうが

http://www.amazon.co.jp/exec/obidos/ASIN/4774114804/ref%3Dbr_ac_502742_top5_1_1/249-1320389-9179505
659名無しさん@そうだ選挙にいこう :03/01/20 21:39
>>651
リストやハッシュ、木構造とかCアルゴリズムの基礎だから理解してるってことだよな。
嘘書いてないよね?

お薦め本:かなり評判のいい本です。
http://www.oreilly.com/catalog/vbanut/

>Cについては、コンソールの使い捨てプログラムが書ける程度、Win32のAPIは
>知らない、と言ったほうがいいレベルです。
もっと謙虚に
ふ、その程度のこと、簡単簡単。
STL使えば(獏
661どぶねずみ:03/01/21 16:38
今勉強中です。縦の列に数字が入力してあるエクセルシートがあります。
それぞれのセルを自動的に8文字以外の文字が入っている場合エラーを出そうと考えております。
教えてくださいませ。
>>661
エラーメッセージ表示のタイミングは、いつ?
どこにメッセージを表示する?
663どぶねずみ:03/01/21 18:24
12345678
123456   ’ここでエラーを出したいのです。
12345678

宜しくお願いします。

664はやいものがち:03/01/21 18:46
■■■■■■「貯金クラブ」が1月15日Open!!■■■■■■

入会詳細はここをクリック
https://www.e-ats.jp/ddm/i?INTRO_ID=a000013950
本部紹介
http://www.webhouse.ne.jp/n/s.htm
>>663
入力規則で済む話では?
>>663
エラーを出すという意味がよくわからないので、赤に塗ってコメントつけてみた。
Sub Macro1()
  Dim Obj1 As Range
  For Each Obj1 In Range("A1:A1000").SpecialCells(xlCellTypeConstants, xlNumbers)
    With Obj1
      If Len(Format(.Value, "0")) <> 8 Then
        .Interior.ColorIndex = 3
        .AddComment
        With .Comment
          .Text Text:="だめぽ"
          .Visible = True
        End With
      End If
    End With
  Next
End Sub

>>665
確かにその方が簡単そう。
VBA板なんだから、>>666が正解っぽい。
668名無しさん@そうだ選挙にいこう:03/01/21 20:51
>>666は二流だな。
666は悪魔の数字だな。
670お金:03/01/22 09:59
■■■■■■「貯金クラブ」が1月15日Open!!■■■■■■

入会詳細はここをクリック
https://www.e-ats.jp/ddm/i?INTRO_ID=a00003950
本部紹介
http://www.webhouse.ne.jp/n/s.htm
671どぶねずみ :03/01/22 10:11
666です。ありがとうございました。
672どぶねずみ:03/01/22 11:29
ななしさんありがとうございます。
Private Sub CommandButton1_Click()
Dim Obj1 As Range
For Each Obj1 In Range("A7:A9").SpecialCells(xlCellTypeConstants, xlNumbers)
With Obj1
If Len(Format(.Value, "0")) <> 8 Then
.Interior.ColorIndex = 3
MsgBox "入力ミスです"
Else
MsgBox "従業員番号OKです"
End If
End With
としましたが、これではセルをひとつずつチェックしてしまいます。
エラーがあるところだけチェックして、エラーがもしひとつもなければ
最後にメッセージを出したい場合はどうするのでしょうか?
Sub test()
Dim i, ErNum As Long
ErNum = 0
For i = 1 To 10 '調べる行を入れる
If Len(Cells(i, 1)) <> 8 Then '調べる列を指定
ErNum = ErNum + 1
End If
Next
If ErNum = 0 Then
MsgBox "エラーは無かったよ"
Else
MsgBox "エラー" & ErNum & "ヶみっけ"
End If
End Sub

字下げのコード忘れたんで省略
674名無しさん@そうだ選挙にいこう :03/01/22 13:58
エクセル2kで、表を作成したのですが
印刷時に出力されないコメントを入力したいのですが
そんなことできるんでしょうか?

できるのであれば教えてください。
よろしくお願いします。
675どぶねずみ:03/01/22 14:25
名無しさん@そうだ選挙にいこう さんどうもありがとうございました。
676君死にたもうことなかれ:03/01/22 14:40
672の人、Else
      MsgBox "エラー" & ErNum & "ヶみっけ"
      End If
      End Sub
を最後に何箇所あったか表示させるのではなくエラーがあったらその部分を表示させる場合には
どうすんの?
677:03/01/22 14:42
エラーはMsgBox "エラー"と出す。
すべてエラーがない場合最後にメッセージをだすのはいっしょ。

673だと、いったんすべて読み込んでからエラーチェックするもんね
エラーが出たときにメッセージボックスを1回1回だすようにするんだよ。
678673:03/01/22 15:02
>>675
どぶねずみさん、釣りですか?

Sub test()
Dim i As Long
For i = 1 To 10
If Len(Cells(i, 1)) <> 8 Then
Cells(i, 1).Select
MsgBox "エラーぢゃ ゴルア"
End If
Next
End Sub
679君死にたもうことなかれ:03/01/22 15:27
上の方 質問と答えがあってませんよ
従業員 
12345678   
12345678  
上のようなデータがあって八文字以外はエラーが出るとします。
上は当然出ませんが、
従業員 
12345678   
123456789
であれば、123456789のセルを読み込んだ時点でエラーのメッセージを出します。
この二つの作業を一つとしてPGしたいのです。
宜しくお教えくださいませ。


680たまさん:03/01/22 15:30
君死にさん、
Sub test()
Dim i, ErNum As Long
ErNum = 0
For i = 1 To 10 '調べる行を入れる
If Len(Cells(i, 1)) <> 8 Then '調べる列を指定
ErNum = ErNum + 1
End If
Next
If ErNum = 0 Then
MsgBox "エラーは無かったよ"
Else
MsgBox "エラー" & ErNum & "ヶみっけ"
End If
End Sub ではエラーが出た場合最後にエラーメッセージがでるから
エラーの場合はひとつずつチェックさせたいのですね
681673:03/01/22 15:41
何か遊ばれてるな。
>>680は漏れじゃないからね。
>>679
「質問と答えがあってませんよ 」だって。激ワラ

本題:
たしかに Excel は基本的には左上のセルから右下のセルまで
入力されている値を順次読み込み、また同時に計算もやっているわけだが、
Excel 形式のファイルからセル内の値を読み込むのを途中でやめるっていう
ことはできない。それが Excel の仕様だから。

普通はそういうの、必要なら別のファイルにマクロ組んでそこに読み込むとか、
ビューを作るとかするんじゃない?
683君死にたもうことなかれ :03/01/22 15:52
ではどうするんでしょう?
エラーのときだけは一個ずつチェックして、メッセージボックスを出し、
ない場合は最後にメッセージボックスを出す方法を。
お手数ですがお教えください。
684だぼはぜくん:03/01/22 16:09
だから673と678を組み合わせれば医院だよ。
685君死にたもうことなかれ:03/01/22 16:26
Sub test()
Dim i, ErNum As Long
ErNum = 0
For i = 1 To 10 '調べる行を入れる
If Len(Cells(i, 1)) <> 8 Then '調べる列を指定
ErNum = ErNum + 1
End If
Next
If ErNum = 0 Then
MsgBox "エラーは無かったよ"
Else
Cells(i, 1).Select
MsgBox "エラーぢゃ ゴルア"
End If
End Sub
?だめだー エラーの部分がおかすィーです。
誰か教えてくださーい

686名無しさん@そうだ選挙にいこう:03/01/22 16:35
>>674
セルで印刷しない設定は出来ないと思う。
外見だけならコントロールのラベルを使えば?
Altを押しながらセルの大きさに重ねて貼付けて、
コントロールの書式設定でプロパティ>オブジェクトを印刷する
のチェキを外す。
687どぶねずみ:03/01/22 16:42
これでいいんじゃない?
Sub check()
Dim chin, ErNum As Long
ErNum = 0
For chin = 7 To 10 '調べる行を入れる
If Len(Cells(chin, 1)) <> 8 Then '調べる列を指定
Cells(chin, 1).Select
MsgBox "エラー"
ErNum = ErNum + 1
End If
Next
If ErNum = 0 Then
MsgBox "エラーはない"
End If
End Sub
688名無しさん@そうだ選挙にいこう:03/01/22 16:44
>>685
こらこら、そんな組み合わせすんなよ。

Sub test()
Dim i, ErNum As Long
ErNum = 0
For i = 1 To 10
If Len(Cells(i, 1)) <> 8 Then
ErNum = ErNum + 1
Cells(i, 1).Select
MsgBox "エラーぢゃ ゴルア"
End If
Next
If ErNum = 0 Then
MsgBox "エラーは無かったよ"
Else
MsgBox "エラー" & ErNum & "ヶみっけ"
End If
End Sub
>>683
エラーのセルが100個あれば…

メッセージボックスが100回表示されるけど (゚ε゚)キニシナイ!!
最初にエラー表示された対象のセルがなんだったのか
じきに忘れちゃうけど (゚ε゚)キニシナイ!!

メッセージボックスが表示される都度
(;´д`).。oO(なんで今すぐデータを修正させてくれないんだろ?)
という疑義が擡げるが ソンナコト (゚ε゚) キニシナイ!!
690OL一年生:03/01/22 17:09
sでーす。
エクセルシートのセルに入力された値が漢字以外であれば
エラーを出すにはどうするの?ちなみにB11〜B20まで
入力していまーす。
おしえてくださーい。
691名無しさん@そうだ選挙にいこう:03/01/22 22:34
ファイルが100ほどあります。すべて同じフォームです。
そのファイルの中の一部分だけをコピーして、一つのファイルにしたいのです。
コピーする部分は同じ部分です。
(例)
 ファイルAのA1〜A10までを、まとめファイルのA1〜A10に貼り付ける。
 ファイルBのA1〜A10までを、まとめファイルのB1〜B10に貼り付ける。
 ファイルCのA1〜A10までを、まとめファイルのC1〜C10に貼り付ける。



という感じです。
1つのファイルを開いて、コピーして、ファイルを閉じる。
そしてまた別のファイルを開いて、コピーして、ファイルを閉じる。
を繰り返すようなマクロを考えています。
アドバイスお願いします。
692名無しさん@そうだ選挙にいこう:03/01/22 22:40
>>690
答える気が起こらない質問の仕方だな。

>>691
今の構想で良いと思う。
693名無しさん@そうだ選挙にいこう:03/01/22 23:12
694( ´Α`):03/01/22 23:21
すいません。関数使って、
セル「あいうえお:かきくけこ」
セル「あいうえお」「かきくけこ」に分ける事って可能でしょうか?
教えてください。
695名無しさん@そうだ選挙にいこう:03/01/22 23:27
>>692
両方とも胴衣。

ファイル名が通し番号で処理できて、
シート名が全部同じなら記述が簡単になるな。
696f:03/01/22 23:28
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
 24時間受付  090−8505−3086
URL  http://www.h5.dion.ne.jp/~grobal/
メール  [email protected]
   グローバル探偵事務局 

697名無しさん@そうだ選挙にいこう:03/01/22 23:51
>>694
説明は詳しく書いてね。
1つのセルに入力された文字列を2つのセルに分けるの?
で、その文字列って必ず「5文字:5文字」って組合せなの?

よくわかんないけど、とりあえず。
=LEFT(A1,FIND(":",A1)-1)
=MID(A1,FIND(":",A1)+1,100)
>>690
つられているのは分かっているが、つい(w
きちんとするならコードを調べるんだろけど、面倒なので。
記号がある等の場合結果が違うぞゴルァというつっこみは無し
@の部分にIf分を追加すれば済むから、厳密にするなら自分でして。

Function f1(s1 As String) As Boolean
 s1 = StrConv(Application.WorksheetFunction.Clean(s1), vbKatakana)
  If s1 = "" Then Exit Function
  '// @
  If StrConv(s1, vbNarrow) = StrConv(s1, vbWide) Then f1 = True
End Function
Sub DQN()
 Dim myRange As Range
 For Each myRange In [B11:B20]
  myRange.Offset(, 1) = f1(myRange.Text)
 Next myRange
End Sub
699691:03/01/23 00:09
>>695
シート名は全部同じです。ファイル名を通し番号にするといいんですね。
でも自分ではそこまで書けないんです。
>>699
書けないなら勉強したら?
701名無しさん@そうだ選挙にいこう:03/01/23 00:28
全角文字から半角文字への修正を自動で行う機能を考えてます。
機能的には、セルに入力後、自動修正といったようになります。
僕が考えた方法としては、

1. ExcelのASC関数を用いる
2. VBAのStrConv関数を用いる
3. Excelの「入力規則」で日本語入力を無効にして
  そもそも全角文字を入力させない

などを考えましたが、それぞれ

1. 自セルを参照しているため、循環参照となる
2. マクロの実行は手動のため、完全自動修正ではない
3. 他のセルのコピー&ペーストにより、
  全角文字の入力が可能となってしまう

などの問題が生じてしまいます。
何か良い方法ないですかね?
702なな:03/01/23 00:40
どなたか教えてください。
個人用マクロブックのマクロを削除しょうとしていたら、BOOK1が表示されなくなってしまいました。
エクセルを立ち上げ直してもPASONALの方が、表示されます。元に戻す方法を教えてください。
>>701
VBAが分かるなら絶対(2)。
Changeイベントで。
>>702
Personal.xlsを削除したら良いかも
Winの検索で見つかるでしょ?
705701:03/01/23 00:57
>>703
VBAはじめたばかりでChangeイベントというのは知らなかったんですけど
調べたらわかりました。
ありがとうございました!
>>702
Personal.xls選んどいて、ウインドウ→表示しない
Book1はウインドウ→再表示→Book1を選択かな
707( ´Α`):03/01/23 02:29
>>697
レスが遅くなってすいません。
バッチリできました、ありがとうございます。
708( ´Α`) :03/01/23 14:32
半角以外エラーを出す場合にはどうすんの?
おせーて 
709名無しさん@そうだ選挙にいこう:03/01/23 15:05
>>708
=IF(LEN(A1)=LENB(A1),"OK","NG")
>>699
Cドライブの「Data」フォルダに「MyData1.xls」〜「MyData100.xls」が
あるとする。また、シート名は「Sheet1」とする。
マクロを実行するときにアクティブなワークブックのSheet1に書き込まれる。

Sub Macro1()
Dim MyFile, MySheet, ThisFile As String
Dim i, j As Integer
ThisFile = ActiveWorkbook.Name
MyFile = "C:\Data\MyData"
MySheet = "Sheet1"
For i = 1 To 100
Workbooks.Open FileName:=MyFile & Format(i) & ".xls", ReadOnly:=True
For j = 1 To 10
Workbooks(ThisFile).Sheets("Sheet1").Cells(j, i) = ActiveWorkbook.Sheets(MySheet).Cells(j, 1)
Next j
ActiveWorkbook.Close
Next i
End Sub
711どぶねずみ:03/01/23 17:11

A(列) B C
従業員番号従業員氏名(漢字) 従業員氏名(カナ)
12345678    矢田亜希子      タケダクミコ
12354567    高輪のやしろ明き夫人 ノビ
23456274    123456789       

上のようなデータを従業員番号、氏名(漢字)、(カナ)の順にエラーをチェック
していくのですが、エラーがある場合にはそこのセルを指定してメッセージボ
ックスをだしたいのです。もし、従業員番号にエラーがなければそこの列全部
を読み込んだ時点で従業員番号OKとメッセージをだし、(漢字)チェックに
移るという仕様でかんがえております。



712どぶねずみ:03/01/23 17:14
今は
Private Sub CommandButton1_Click()
Dim i, ErNum As Long
ErNum = 0
For i = 7 To 10 '調べる行を入れる
If Len(Cells(i, 1)) <> 8 Then '調べる列を指定
Cells(i, 1).Select
MsgBox (i & "・・・エラーです")
ErNum = ErNum + 1
End If
Next
If ErNum = 0 Then
MsgBox "エラーは無かったよ"
End If
Dim R As Range
with CreateObject("VBScript.RegExp")
Each R In Range("B7", Range("B10").End(xlDown))
If Not .test(Trim(R.Value)) Then
R.Select
If MsgBox(R.Address(0, 0) & "... Error発見") = vbOK Then
Exit Sub
End If
End If
Next
End With
End Sub
で、問題は数字の場合、空欄の場合はエラーがでないんですー。
お教えください 

713名無しさん@そうだ選挙にいこう:03/01/23 20:35
>>704
Winの検索ってなんですか?
すみません。
教えて下さい。
>>706
book1の再表示じたいがありません。

Book1の再表示じたいが、ありません。
>>713
Windowsのスタート→検索のこと

Excelのメニュー→ウィンドウ→再表示
>>712
IFを記述すれば良いだけだろ?
(数値はislng辺りでチェックして、空白は<>"")
716なな:03/01/23 21:06
ファイルではなく、Excelをたちあげると
Book1ではなくPerspnalがひらきます。
再表示は、ありません。
>>716
メニュー→ウィンドウ→表示しない→Excel再起動
Personal.xlsは保存すること
>691

マクロを組んだXLSファイルと同じフォルダに処理したいファイルを全部入れて実行

Sub Test()
Dim fs As FileSearch, openBook As Workbook, Col As Integer
Dim newBook As Workbook
On Error GoTo ERR
Application.ScreenUpdating = False
Set fs = Application.FileSearch
fs.NewSearch: fs.LookIn = ThisWorkbook.Path: fs.FileName = "*.xls"
If fs.Execute = 1 Then Exit Sub
Set newBook = Workbooks.Add(xlWBATWorksheet)
For i = 1 To fs.FoundFiles.Count
 If Dir(fs.FoundFiles(i)) <> ThisWorkbook.Name Then
   Set openBook = Workbooks.Open(fs.FoundFiles(i))
   Col = newBook.ActiveSheet.Range("IV1").End(xlToLeft).Column + 1
   openBook.ActiveSheet.Range("A1:A10").Copy
   newBook.ActiveSheet.Cells(1, Col).PasteSpecial (xlPasteAll)
   openBook.Close
 End If
Next i
Application.DisplayAlerts = False
newBook.ActiveSheet.Columns(1).Delete
ERR:
Application.DisplayAlerts = True
Set openBook = Nothing: Set newBook = Nothing: Set fs = Nothing
End Sub
719691:03/01/24 00:00
>>710>>718
見捨てられたと思ってたら、、、ありがとうございます!!
早速明日やってみます!!
720名無しさん@そうだ選挙にいこう:03/01/24 09:10
エクセル2kでセルに文字を入れて
そのセルに対角に斜線(/)を入れたいのですが
どうやったらできるのでしょうか?
よろしくお願いします。
>>720
斜め罫線だよね。
自動記録でやってみれ。
722なな:03/01/25 00:05
>>717
ありがとうございます。やってみます。
723名無しさん@そうだ選挙にいこう:03/01/25 09:32
マクロのモジュールを一括解放できるツールはありませんか?
インポートはドラッグで簡単なんですけどね
724ああああ:03/01/26 13:43
すんません、うまくいかないので教えてください。
VBSのファイルから、エクセルを起動してファイルオープンのダイアログ
を表示したいのですが、(↓VBSファイル内の一部)

1:Dim objXL
2:Set objXL = CreateObject("Excel.Application")
3:objXL.Visible = TRUE
4:objXL.Dialogs(xlDialogOpen).Show

↑4行目で、実行時エラーが出てしまいます。これ、無理なんでしょうか?
725名無しさん@そうだ選挙にいこう:03/01/26 14:05
>>723

標準モジュールを全部消すマクロ
Sub HogeHoge()
  Dim Obj1 As Object, Obj2 As Object
  Set Obj1 = ActiveWorkbook.VBProject.VBComponents
  For Each Obj2 In Obj1
    '//Moduleだけ削除する
    If Obj2.Type = 1 Then Obj1.Remove Obj2
  Next
  Set Obj1 = Nothing
End Sub

XPでは制限があるらしいですが。
組込定数が使えないようで。

xlDialogOpen=1なので

Dim objXL, DlgAns
Set objXL = CreateObject("Excel.Application")
objXL.Visible = TRUE
objXL.Dialogs(1).Show
727726:03/01/26 17:11
>>724
が抜けてました。
>>725
> XPでは制限があるらしいですが。

ツール→マクロ→セキュリティ
→「Visual Basic プロジェクトへのアクセスを信頼する」にチェック
>>725
>>728
ありがとうございます。試してみます。
730ああああ:03/01/26 20:53
>>726-727 ありがとうございます。ありがd。
731名無しさん@そうだ選挙にいこう:03/01/27 01:38
一つ質問なのですが、
  並び替え前      並び替え後
A B C A  B  C   A A B B C C
1 4 7 10 13 16 1 10 4 13 7 16
2 5 8 11 14 17 ⇒ 2 11 5 14 8 17
3 6 9 12 15 18 3 12 6 15 9 18

上のように並び変える場合、簡単な方法で並び変え可能でしょうか?
もし、ありましたらアドバイス教えてください。
また、このように変換できるマクロがあるのでしょうか?
>>731
A B C A B C ⇒ A A B B C C
と言うところが、よく分からない。

マクロは「ある」のじゃなくて、「作る」ものなんだけど・・・。
マクロの一括エキスポートする方法も教えて欲しい
734名無しさん@そうだ選挙にいこう:03/01/27 09:43
>>731
横のソートは簡単にはできないかと
別のシートにコピペする際に縦横換えてソート
それをさらに別のシートに縦横換えてコピペ
735名無しさん@そうだ選挙にいこう:03/01/27 12:06

セルA1が「a」ならセルA2は「1」
セルA1が「b」ならセルA2は「2」
セルA1が「c」ならセルA2は「3」
セルA1が「d」ならセルA2は「4」
セルA1が「e」ならセルA2は「5」
.
.
.
.        
みたいな表を作成したのですがイマイチ上手く行きません。
商品名やら社名やらを入力すると自動的にそれに対応するコードが出るようなそんな表です
どなたか宜しくお願いします
736dada:03/01/27 15:52
みなさん、教えてください。
従業員番号従業員氏名(漢字)従業員氏名(カナ)
12345678     矢田亜希子第一
123456789     [空白] ダイイチ

従業員番号八桁、 従業員氏名全角(漢字)、 従業員氏名(カナ)、
それぞれ、空欄などの場合はエラーを出す処理を考えています。
最後、カナのところを考えていますが、わかりません。おしえてください。


737dada:03/01/27 15:57
上のものですが、ちなみに今のところは次の部分まで考えました。
Private Sub CommandButton1_Click()
Dim i As Long, j As Long
Dim s As Boolean
For i = 1 To 3
s = False
For j = 7 To Range("A65536").End(xlUp).Row
If kanji(Cells(j, i), i) Then
s = True
End If
' ErNum = ErNum + 1
'If ErNum = 0 Then
Next
If s = False Then
MsgBox "列目エラーなし"
End If
Next
End Sub
Function kanji(myR As Range, myI As Long) As Boolean
738:03/01/27 15:57
Select Case myI
Case 1
If Len(myR.Value) <> 8 Then
myR.Select
MsgBox "文字数エラー"
kanji = True
End If
Case 2
If myR.Value = "" Then
myR.Select
MsgBox "空白セル発見"
kanji = True
Else
If LenB(myR.Value) = _
LenB(StrConv(myR.Value, vbFromUnicode)) Then
Else
myR.Select
MsgBox "半角文字発見"
kanji = True
End If
End If
End Select
End Function

739 :03/01/27 18:47
セルのA1からA10までにそれぞれ数値が入っているとして、
1つおきずつのセルを選択してコピーし、それをとなりの列に並べたいのですが
VBAでどうやればいいですか?
>>733

Sub HogeHoge()
  Dim Obj1 As Object, Obj2 As Object, DirName As String
  '//ActiveWorkbookが対象
  With ActiveWorkbook
    Set Obj1 = .VBProject.VBComponents
    If .Path <> "" Then DirName = .Path Else PathName = CurDir
  End With
  DirName = DirName & Application.PathSeparator
  For Each Obj2 In Obj1
'//タイプが標準Moduleかつ空でないものだけExport
    With Obj2
      If .Type = 1 And .CodeModule.CountOfLines > 0 Then
        .Export DirName & .Name & ".Bas"
      End If
    End With
  Next
  Set Obj1 = Nothing
End Sub
>>731

A1:F4までその表が入っているとすると。

A1:F4を選択し、
 データ→並べ替え→ オプションで 方向を列単位に変更し、
 ソートキーを最優先キーを行1・昇順、2番目のキーを行2・昇順としてOK

これをマクロで記録して、Select・Selectionをはずすと、

Sub HogeHoge()
Range("A1:F4").Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("A2") _
, Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlLeftToRight, SortMethod:=xlPinYin
End Sub
>>735
(V/H)LOOKUPワークシート関数またはSUMIFワークシート関数でいいのでは?
743名無しさん@そうだ選挙にいこう:03/01/27 19:48
>>742
いや、それがなぜかうまくいかなくて...
スイマセン、式を教えていただけるとありがたいのですが...
>>740
ありがとうございます。
こういうマクロは便利です。
>>743
A1:A10に会社名、B1:B10にコード番号、C1に検索する会社名が入ってる場合。

ツール → アドイン でLookupウィザードにチェックがついてるのをまず確認

=VLOOKUP(C1,A1:B10,2,FALSE)
でC1セルの値と対応するコード番号が取得できます。
会社名が無かったらエラーになります。

もし、会社コードが数値(数値として演算可能)ならば、
=IF(COUNTIF(A1:A10,C1)>1,"複数一致",IF(COUNTIF(A1:A10,C1)=0,"一致なし",SUMIF(A1:A10,C1,B1:B10)))
という式でLookUp風の処理が出来ます。
746745:03/01/27 22:23
>ツール → アドイン でLookupウィザードにチェックがついてるのをまず確認
 ずっと勘違いしてますた。必要なかったようです、スマソ。

LOOKUPワークシート関数を使うとV(H)LookUpと同じように数値以外も取れます。

=LOOKUP(C1,A1:A10,B1:B10)

VLookUpの最後の引数が省略またはTrueの時と同じく、検索キーが昇順に並んでないとだめなんだそうです。
>737

関数の方が速いと思うが。。。
=IF(AND(LEN(A7)=8,ISNUMBER(A7)),1,0)
=Mod(Len(B7),2)
=IF(AND(LENB(C7)=LENB(JIS(C7)),LENB(C7)/2=LENB(ASC(C7))),1,0)

Sub aaa()
Dim r As Range, s As Range
Set r = Range("A7:A" & Range("A65536").End(xlUp).Row)
For i = 0 To 2
 For Each s In r.Offset(0, i)
  Select Case i
  Case 0
   If Not IsNumeric(s) Or Len(s) <> 8 Then
     MsgBox s.Address & ""
   End If
  Case 1
   If s = "" Or _
    (LenB(StrConv(s, 128)) Mod 2) > 0 Then
     MsgBox s.Address
   End If
  Case Else
   If s = "" Or _
    s <> StrConv(s, 4) Or s <> StrConv(s, 16) Then
     MsgBox s.Address
   End If
  End Select
 Next s
Next i
End Sub
748名無しさん@そうだ選挙にいこう:03/01/28 11:03
>>745,746
サンクスです!上手く行かなかった理由がわかりました。
で、ふと思ったのですが、このようにしてとったコードナンバーを連番でとる事ってできるのでしょうか?

例えば「a」がこの表の中で2回目なら「1002」、3回目なら「1003」、4回目なら「1004」
同じく「b」がこの表の中で2回目なら「2002」、3回目なら「2003」、4回目なら「2004」
みたいな感じです。

こう言う事って可能なんでしょうか?VLOOKUPで各社名に対応したコードを表示させつつも
そのコードを連番で取る、みたいな...
749名無しさん@そうだ選挙にいこう:03/01/28 11:13
>>748
VBAが解るなら楽勝
750748:03/01/28 19:05
>>749
いや、VBA解りませぬ...今時情けない話ですが、まだ未知の領域でして...
教えて頂けるとありがたいです
751名無しさん@そうだ選挙にいこう:03/01/28 20:44
752名無しさん@そうだ選挙にいこう:03/01/29 12:46
今、表示しているシートとは別のシートを印刷したいのですが、できますか?
シート1からシート2にジャンプさせないで、シート1を表示したまま、
シート2を印刷したいのです。
753名無しさん@そうだ選挙にいこう:03/01/29 16:55
テキストファイルの中身のデータ(スペース区切り)全部をまとめて
新しいシートの指定したセル位置以降にインポートしたいんですけど
どうやればいいですか?
workbooks.opentextを使うと、自動的に新しいブックができちゃいます。。。
>>752

Sub HogeHoge()
  '//印刷したいシートを指定
  ActiveWorkbook.Worksheets("Sheet2").PrintOut
End Sub

印刷ページや枚数は引数があるのでPrintOutのヘルプを参照
755752:03/01/30 00:59
>>754
ありがとうございます。
756名無しさん@そうだ選挙にいこう :03/01/30 12:43
752さんと似た質問なのですがシート名「入力」でボタンを押すとシート名「出力」が
1枚印刷されるように↓のようにしてます。

Sub 印刷()
印刷 Macro

Sheets("出力").Select
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
:=True
Sheets("入力 ").Select
End Sub

この時複数台のプリンターがあるのですが、特定のプリンターを
指定できるように出来ませんか?
757名無しさん@そうだ選挙にいこう:03/01/30 14:46
EXCELで 表の中の異なる領域 を数える方法

# Excel総合相談所で最初に質問してしまったのですが、
# EXCEL VBA 用のスレッドがあるのが分かったので、こちらで質問しなおします。

下のような 5行*10列 の表に数字が記入されている状態です。

1234567890
------------
1 | 1112111311
2 | 1112211311
3 | 1122211311
4 | 1111111122
5 | 1444441122

# 領域の種類を表す数字: 1,2,3,4

この表を VBA を使って以下のような計算結果を出力するには
どのようにすればよいでしょうか?

領域の種類(数字)別の個数:
1: 2つ
2: 2つ
3: 1つ
4: 1つ
領域の数の合計: 6つ


よろしくお願いします。
758名無しさん@そうだ選挙にいこう :03/01/30 21:52
>>756
VBA書いてもプリンターの場所・設定でうまく行かないかもしれないから
以下の方法をお勧め。
普通にマクロの記録使って通常プリンターじゃないほうを選択して印刷して
マクロ作成。そしたらActive printerに関するVBAが出来てるはず。
それを参考にそのシートごとの設定やればいいよ。
(通常使うプリンターではActive printerの項目が設定されないので
後でActive printerの項目付け足さなければいけないです)
>>757
解決してよかったね。
760757:03/01/31 02:02
>>759
解決しました。どうもお邪魔しました。
761名無しさん@そうだ選挙にいこう:03/01/31 07:25
ハングマンGo!Go!

Excel4.0 マクロ(なんでやねん)を
VBA(Excel2000とか)に書き換えるための
ノウハウ (・∀・)b バチーリ! なサイトがあれば
教えてください。おながします (´・ω・`)
763名無しさん@そうだ選挙にいこう:03/01/31 15:49
764名無しさん@そうだ選挙にいこう :03/01/31 15:55
ダイアログで
「チェックボックス1」のValueで「チェックボックス2」の
入力制御(Enabled値の操作)を行おうとおもいまして

Private Sub CheckBox1_Click()
If エディットボックス1.Value = True Then
エディットボックス2.Enabled = True
Else
エディットボックス2.Enabled = False
End If
End Sub

というプログラムを組んだんですが、
動作してくれません。
どうすればよいのでしょうか?
765名無しさん@そうだ選挙にいこう:03/01/31 16:53
Excel97でフィルターがかかっているシートの可視セルのみにVBAで式を埋め込もうとしているのですが
次の可視セルへ簡単に移動する方法はありませんか?
現在は
Sub movenextcell()
Selection.Offset(1, 0).Select
While ActiveCell.EntireRow.Hidden = True
Selection.Offset(1, 0).Select
Wend
End Sub
としているのですがかなり遅いので素早く移動する方法が有れば教えてください。
いちいちSelectすると遅いでつ。
移動する必要がないようにみえるので直接セルを指定してます。
765のコードには式を埋め込んでる様子がないにで適当な式を入れてみたです。
ついでに色もつけてます。

Sub HOGEHOGE()
  '//A列で範囲を判定
  With Range(Range("A2"), Range("A65536").End(xlUp))
    If Not .SpecialCells(xlCellTypeVisible) Is Nothing Then
      For Each c In .SpecialCells(xlCellTypeVisible)
        With c.Offset(0, 1)
          .Interior.ColorIndex = 37
          .FormulaR1C1 = "=R[1]C[1]+R[1]C[2]"
        End With
      Next
    End If
  End With
End Sub
767名無しさん@そうだ選挙にいこう:03/01/31 20:46
hogeって単語よくみるけど、なんなの?
>>767
hageの隠語です
>766

ループの必要は無いだろ

Sub hagehage()
Dim r As Range, LRow As Long
 LRow = Range("A65536").End(xlUp).Row
 Set r = Range("B2:B" & LRow).SpecialCells(12)
 r.Interior.ColorIndex = 37
 r = "=C" & r.Row & "+D" & r.Row
End Sub
770名無しさん@そうだ選挙にいこう:03/02/01 07:40
>>769
ループの必要はないけどお前のも相当に汚いぞ。
いずれも
>With Range(Range("A2"), Range("A65536").End(xlUp))
この部分はフィルターをかけてからでは上手くいかないケースも
あるんじゃないのかい?
771770:03/02/01 07:47
スマソ。
不可視セルへ式入力と勘違いしてしまった。
可視セルだったんだな。
>770

では、お前ならどう書く?
書いて見せろよ。
773名無しさん@そうだ選挙にいこう:03/02/01 15:54
今現在excelで開いてるブックを全て取得して、
abc.xlsが存在しているかどうか調べるのってどうやればいいですか?
>773

Sub hogehage()
Dim wb As Workbook
 For Each wb In Workbooks
  If wb.Name = "abc.xls" Then MsgBox "あったぞ"
  Exit For
 Next wb
End Sub
775名無しさん@そうだ選挙にいこう:03/02/01 17:14
>774 ありがとうございました
776770:03/02/01 17:40
769,772はほっとくとして、766さん
If Not .SpecialCells(xlCellTypeVisible) Is Nothing Then
この部分はA2以降に可視セルがないと、
Range(Range("A2"), Range("A65536").End(xlUp))はA1のセルを返すから
やはりフィルターにかけた後ではまずいみたいね。

777770:03/02/01 17:45
なんかいまいち意味不明な書き込みになってしまったな。
>Range(Range("A2"), Range("A65536").End(xlUp))はA1のセルを返すから
>やはりフィルターにかけた後ではまずいみたいね。
下に訂正
Range(Range("A2"), Range("A65536").End(xlUp))はA1のセルを返すから
Nothingになることはないね。
やはりフィルターにかけた後ではまずいみたいね。

778765:03/02/01 20:02
皆さんありがとうございました。
月曜に会社で試してみます。
あれから色々やって
Sendkeys "{DOWN}",True
で次の可視セルに移動出来るのを発見したのですが
これで大丈夫ですかね。
速度的には不満はなくなったんですが。
書き忘れましたが、式は前の可視行を参照して現在行の数字を+−してるので
一括処理では多分うまくできません。

>>774
Ifをブロックにするか、Exitを:でIfの行末にくっつけるかしないと。
Exit Forがブロック外にあるから無条件Exitになってますよん。

 For Each wb In Workbooks
  If wb.Name = "abc.xls" Then
   MsgBox "あったぞ"
   Exit For
  End If
  'または
  'If wb.Name = "abc.xls" Then MsgBox "あったぞ": Exit For
 Next wb
780名無しさん@そうだ選挙にいこう:03/02/01 22:43
1次元配列の中に様々な数値が入っているとして、
その中の最大値や最小値を取り出すにはどうすればいいですか?
781ぶうびい:03/02/01 22:57
>>780 プログラム初心者の問題みたいだな。(w
782769:03/02/01 23:05
>776

別に>766さんのソースが汚いなんて一言も言ってないよ。

同じ結果(766さんのとは1行ずれるけど)なら、ループの必要がない
ので圧倒的に速い例を出しただけ。(やってみれば解ると思うが、抽出
した行が5000くらいあると明らかに違う)

>776-777

元々フィルタの結果に対する処理を聞いているだろ?
Range("A65536").End(xlUp)の結果で簡単に判断出来るのに、お前の
言う、綺麗なソースの例が出せないのでごまかしてるのか?
ケチをつけるなら逃げないでソースを出せよ。
(出せないで逃げると思うが)
783770:03/02/01 23:35
>>782
あまり低レベルなこと書いてると怒るぞコラ!
>元々フィルタの結果に対する処理を聞いているだろ?
>Range("A65536").End(xlUp)の結果で簡単に判断出来るのに
だから
>If Not .SpecialCells(xlCellTypeVisible) Is Nothing Then
これがNothingになることはないから無意味だといってるんだよ。
766さんは気付いてると思うけど、お前は見込みがないな。
784769:03/02/01 23:57
>783
>If Not .SpecialCells(xlCellTypeVisible) Is Nothing Then
>これがNothingになることはないから無意味だといってるんだよ。

そんな事は解ってるよ。
そんな事を言ってごまかしてないで、お前の言う綺麗なソースを
見せてみなって言ってるのよ。

参考にすっからさ。よろしく。
785769:03/02/02 00:11
これまでの経緯でつ。

>765 フィルタ後の処理を聞いている。
>766 フィルタ後の処理例を書いた。
>769 766の処理ならループはいらないと処理例を書いた。
>770 769は汚いソースだと言った。
>772 なら書いてみろと言われた。
>776-777 書けないのでごまかした。
>782 再度、綺麗なソース書いてみろと言われた。
>783 書けないので切れた。
786mimi:03/02/02 00:49
はじめて書込みします。

Bookが開いたときに、特定のセルにロックをかける処理を入れてるのですが、
自分のパソコン(WinXP,Office2000,Excel2000)では問題なく動くのですが、
他人のパソコン、たとえばWinXPのExcel2002、WinNT2000のExcel97で
Bookをオープンすると、
「RangeクラスのLockedプロパティを設定できません」というエラーが出ます。
範囲をSelectで選択してからSelection.Locked=Trueなどに変えてもダメでした。

何か考えられることはあるでしょうか?
ソースは下の通りです。VBA初心者なもので、よろしくお願いします。

******ソース******
'既に保護されている場合、一旦解除
If ActiveSheet.Protect Then
ActiveSheet.Unprotect
End If

'全てのセルのロックをはずす
ActiveSheet.Cells.Locked = False

ActiveSheet.Range("A1:L3").Locked = True
ActiveSheet.Range("A5:B5").Locked = True
ActiveSheet.Range("I5").Locked = True
ActiveSheet.Range("A6:L6").Locked = True

ActiveSheet.Protect Contents:=True
787769:03/02/02 01:06
      ☆ チン     マチクタビレタ〜
                        マチクタビレタ〜
       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ ___\(\・∀・) < 770まだ〜?
            \_/⊂ ⊂_ )   \_____________
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       |  綺麗なやつ  |/
>786

Win98SE + Excel97 では問題ないようですが。

ActiveSheet ではなく、明確に指定してみては?

With ThisWorkbook.Worksheets(1)
 .Unprotect
 .Range("A1:L3,A5:B5,A6:L6,I5").Locked = True
 .Protect
End With


Excelのバージョンによるものかも知れないけど、
Excel97では下記は無意味のような。

If ActiveSheet.Protect Then
 ActiveSheet.Unprotect
End If

789769:03/02/02 03:08
>783

やっぱり逃げたか。。。
それとも必死こいて考えてるのかな?ワラ
790769:03/02/02 12:23
>783

丸一日張り付いていたやつが、ここまでダンマリって事は、、
やはり逃げたようだな。

>770、低レベルなくせにエラそうなこと書いてると怒るぞコラ!
自分でも気づいていると思うけど、お前は見込みないな。
791名無しさん@そうだ選挙にいこう:03/02/02 12:32
>>790
もうやめれば?フレーミング起こしかけてるぞ。
読んでて気持ちいいものではない。
>>783書いた奴も売り言葉気味だが、ここは普通のBBSじゃ
ないんだから769も流せよ。

>>769のソースで感じることを俺が書いてみるよ。
フィルター掛けた後でうまくいかない云々は別として
(他人が)見易いと感じる為には以下の点がまずいと思う。
(汚いという意味ではない。見づらいという意味な)

1.SpecialCellsの引数にリテラルな数値を書くな
2.面倒でもWithを使え
3.VBA中では式を使うときはRC形式を使え
4.プロパティは省略するな

3は慣れの問題もあるので、人それぞれか。
マクロ記録から入った人間にはRC形式の方が
慣れているので。

4は見づらさの他に
Excel総合相談所10
http://pc2.2ch.net/test/read.cgi/bsoft/1042913355/268-269
のような問題もある(俺も確かにおかしくなる Win2K+Excel2000)。

確かに見やすく書いても自分流に書いても処理は一緒だよ。
でも他人が読むことを前提に書いた方がデバッグにも役立つよ。
792770:03/02/02 20:04
>>765
>>778
フィルタ後の可視セルに式を入力するんじゃなくて、全セルにSUBTOTAL関数を
入力すればいいと思うよ。フィルタにかける前に入力しててもいいが。

769には付き合えん。こちとら忙しいんじゃ。
793mimi:03/02/02 20:08
>788
ありがとうございます。
もう一度チャレンジしてみます!
794769:03/02/02 21:38
>791
ご忠告どうも。
俺もそろそろ終わりにしようと思ってたんだけどねぇ。

>792
2ちゃんに一日貼り付いてるお方がそんなにお忙しいとは大変失礼致しました。
口ぶりから、この程度の処理なら5分もあれば出来ると思っておりました。
あとどのくらい待てば提示頂けますか?

それとも只の負け惜しみでつか?プ
>>792
わざわざ解答してくれてる人に失礼じゃないか?
脳が悪いのなら入院したほうがいいんじゃない。
ふざけるな。
書式のシート背景を設定しているとき、
ある座標での、その背景の色情報を参照することは可能でしょうか?

セルを方眼状にして、条件付き書式でパターン色を設定し、
2値画像をシート上でトレースするようなことを考えています。
797770:03/02/02 23:04
>>794
君も粘着だね。
おれは君みたいにブサイコ(最高に不細工)なコードは書けないんだよ。

>>795=769
778は読んだのか?
>書き忘れましたが、式は前の可視行を参照して現在行の数字を+−してるので
>一括処理では多分うまくできません。
と書いてるだろう?
多分SUBTOTAL関数の出番とは思わないのか?
なんで失礼なんだ?
質問者第一に考えればそうならないか?
798691:03/02/02 23:23
>797

だから、高貴なやつをお願いしてるんでつが?
なぜなかなか書いて頂けないのでしょう?

それとも只の負け惜しみでつか?ププ
799769:03/02/02 23:26
>798

691 → 769でした。

770さん、ごめんなさい。
只の負け惜しみじゃないですよね?プププ
>>796
Sub CheckColor()
 Dim myRange As Range
 For Each myRange In Selection
  With myRange
   Debug.Print .Address, .Interior.Color
   'MsgBox (.Address & ":" & .Interior.Color)
  End With
 Next myRange
End Sub
>>796
スマソ
条件付書式(FormatCondition)だったね。
Interior.Colorだと取得できないね。
・・・というわけで、800は無視してくれ
802796:03/02/03 00:42
>>801
レスありがとうございます。
分かり難い表現でした。もうちょっと詳しく書きます。

エクセルメニューの"書式"→"セル"→"背景"で
方眼状にしたセルに背景画像を読み込みます。
このセルには条件付き書式が設定してあって、
値が1ならパターン色を黒、0なら白というようにしています。
これまでは背景画像を見ながら0、1、0、…などと
手動でトレース(のようなこと)をしていましたが、
多くの画像に対してこのような処理を行う必要が出てきたため、
方法を検討していました。
VBAでは無理があるでしょうか?
>>802
"書式"→"シート"→"背景"だよね?

背景画像の色情報を取得できないか?ってことなら、
難しいんじゃないかな?
少なくとも自分には分からない。
804796:03/02/03 01:14
>>803
> "書式"→"シート"→"背景"だよね?
あ、そうでした。たびたびすみません。

VBA以外の方法も含めて再検討してみます。
どうもありがとうございました。
805教えてください:03/02/03 12:21
VBAを始めたばかりなのですが、VBAからInternet Explorerを起動して
特定のwebページを表示させたいのですが、どうすればいいのでしょうか?
806770:03/02/03 17:54
>>805
Sub SUKEBE()
With CreateObject("Internetexplorer.Application")
.Visible = True
.Navigate "http://www.adult-station.com/"
End With
End Sub
こんな事か?
807770:03/02/03 17:57
スマソ。インデント入れ忘れたよ。
808名無しさん@そうだ選挙にいこう:03/02/03 18:00
TEST
  TEST
809805:03/02/03 19:21
>>806
教えてくださって、ありがとうございます。
おかげさまでうまく行きました!
810名無しさん@そうだ選挙にいこう:03/02/04 08:15
マウスポインタの位置を取得して、右クリックしたらそのマウスポインタのとこに
ユーザーフォームを表示したいのですが、どうすればいいのでしょうか?
>>810
ユーザーフォームにコピペ汁
呼び出し側はどこで右クリックするかによって変わるぞ
まあそのくらい自分で調べろや

Private Const LOGPIXELSX = 88
Private Const LOGPIXELSY = 90

Private Type POINTAPI
  X As Long
  Y As Long
End Type

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long

Private Sub UserForm_Initialize()

  Dim lngDC As Long
  Dim udtPos As POINTAPI

  lngDC = GetDC(FindWindow("ThunderDFrame", Me.Caption))
  GetCursorPos udtPos
  Me.Move udtPos.X * 72 / GetDeviceCaps(lngDC, LOGPIXELSX), udtPos.Y * 72 / GetDeviceCaps(lngDC, LOGPIXELSY)

End Sub
812名無しさん@そうだ選挙にいこう:03/02/05 08:35
>>811さん
どうもありがとうございます。
これから研究してみます。
813名無しさん@そうだ選挙にいこう:03/02/06 18:25
たとえば、
754, 451, 914, 251, ……, 254
という配列があって、今A1セルに451が入力されているとします。
1回実行するとA1セルには次の914が、もう1回実行するとその次の251が
入力され、最後の254が入力されているときにはA1を先頭の754に戻す、
ということをしたいのですが、どうすればいいですか?
814名無しさん@そうだ選挙にいこう:03/02/06 18:33
815test:03/02/06 20:20
TEST
  TEST
>813
staticでもいいが、ちゃんと値をチェックしたいのであれば

Sub たとえば()
  Dim 配列
  Dim 現在の値
  Dim 何番目 As Integer

  配列 = Array(754, 451, 914, 251, 254)
  現在の値 = ActiveSheet.Range("A1").Value

  For 何番目 = 0 To UBound(配列) - 1
    If 配列(何番目) = CV Then
      Exit For
    End If
  Next

  If 何番目 = UBound(配列) Then
    何番目 = 0
  Else
    何番目 = 何番目 + 1
  End If

  ActiveSheet.Range("A1").Value = 配列(何番目)

End Sub
817813:03/02/06 22:47
>>816
ありがとうございます!
ええと、前半のFor〜Nextで今何番目かを調べて、
後半のIfでは配列の最後かどうかで1を足すか0にするかを
調べているってことですね。

ところで、1つ目のIf文は
  If 配列(何番目) = 現在の値 Then
でOKですよね?たぶん書き直し間違えだと思いますが。。。

まだVBA始めたばかりだけど頑張ろっと。
ちょっとずつ分かってきた。・・・気がするだけかな?
>>817

>ところで、1つ目のIf文は
>  If 配列(何番目) = 現在の値 Then
>でOKですよね?たぶん書き直し間違えだと思いますが。。。

そのとおりです。
スンマセン。ごっちゃになりました。
819名無しさん@そうだ選挙にいこう:03/02/07 00:14
複数のデータから最大値と最小値を取り出し、
その最大値を1に、最小値を0に、うまく規格化する方法があるでしょうか?
>>819
(値-Min)/(Max-Min)じゃだめなの?
全要素から最小値を引いて、その上で「最大値-最小値」で割るんじゃ駄目なの?
あ、かぶった。
823819:03/02/07 01:10
>>820
>>821
うわー、そうですね。 それで問題ありませんでした。
難しく考え過ぎてました。 恥ずかしい…。
どうもありがとうございました。
824名無しさん@そうだ選挙にいこう:03/02/07 20:29
質問させて頂きます。

ある領域内で、特定の条件を満たしたセルを選択(select)した状態にしたいのですが
どのようにしたらいいでしょうか?

単純にforループの中で条件を満たしたセルをselectしただけでは
最後にselectされているセルはひとつだけです。

アドバイスよろしくお願いします。
>>824
Unionとオブジェクト変数(Range)を使えばいい
Selectするのはループ終了後。
>>825

レスありがとうございました。
Unionをキーワードに調べてみたいと思います。
>>824
遅レスだけどSelectメソッドに引数つければ楽かも
最初の一個だけ .Select True して、残りを .Select False
例えば For i=1 To n のループ内なら、 〜.Select (i=1) とするだけでOK
828名無しさん@そうだ選挙にいこう:03/02/11 07:34
>>827
それはシートのセレクトじゃない?
セルでは上手くいかないと思うのだが。
829名無しさん@そうだ選挙にいこう:03/02/11 16:08
825の解法でも最初のUnionの引数をどうするかが問題だな。

Set z = Range("A1:C1")  ←こんな無意味な代入が必要
Set z = Union(z, .Range("A3:B3"))
830名無しさん@そうだ選挙にいこう:03/02/11 18:55
25歳。
去年まで金無し君だったけど、オンラインカジノとパチンコで
二年で350万貯めた。一度やってみなよ。
初回のみだけど、1ドル以上のチップを買えば30ドル(4000円くらい)貰える。
もらうだけもらってプレイせずに換金することもできるし、ルーレットで赤か黒に
思い切って賭けてしまえば50パーセントで二倍になる。
金なきゃオフラインでゲームすればいいだけ。暇つぶしになる。
ビデオポーカーとかスロとか色々あるのでマジでお勧め。
http://www.imperialcasino.com/~1kl5/japanese/
 
831名無しさん@そうだ選挙にいこう:03/02/11 19:55
>>829
If z = Nothing Then
で分岐してもいいぞ。
でも私はあるところでUnionは遅いから使わない方がいいっていわれターヨ。
なんでもデータ数が多いと遅いんだとか。
832名無しさん@そうだ選挙にいこう:03/02/11 20:00
【AF7】のセルから相対で見て左に2、上に1のセルに入っている値を
【AB44】に表示させる。また、【AB44】にすでに値が入っている
場合には【AC44】に値を表示させる。

こんなことをやりたいんですが、職場の男性陣は誰も知りません。
どなたか教えていただければうれしいです。よろしくお願いします。
833名無しさん@そうだ選挙にいこう:03/02/11 20:24
http://bbs.1oku.com/bbs/bbs.phtml?id=rantyan
    ★ココだ★ココだ★
>>832
Sub test()
 If [ab44] = "" Then
  [ab44] = [af7].Offset(-1, -2)
 Else
  [ac44] = [af7].Offset(-1, -2)
 End If
End Sub
835名無しさん@そうだ選挙にいこう:03/02/11 20:40
お返事ありがとうございます。>834さん
説明不足ですみません。

私が質問した例がいくつものセルに渡って同じ作業を
繰り返さないとならないため記述が膨大な量になって
しまうので何か簡単に記述する方法はないものでしょうか?
>>835
あるけど・・・
対象セルの条件がわかんないよ。
>>836
条件が判らないなりに書いてみた。
あとは自分で調整して。

Sub test()
 Dim myRange As Range
 Range("AA44") = "Data"
 Range("AB44:IV44") = ""
 For Each myRange In Range("AF7:IV7")
  Range("IV44").End(xlToLeft).Offset(, 1) = myRange.Offset(-1, -2)
 Next myRange
End Sub

さて、今から夕食だ!
838名無しさん@そうだ選挙にいこう:03/02/11 23:44
リストの内容を別のシートにコピーしたいのですが
毎回コピーを開始するセルが変わるんです。
それで、別のセルに一番最初にコピーを開始したいセルの値を入れて
そのセルの値をリストから検索して
そのリストのセルからコピーをスタートしてくれるようにしたいのですが
良い方法はないでしょうか?
説明がわかりにくいかもしれませんがお願いします。
839デフォルトの名無しさん:03/02/11 23:53
>そのセルの値をリストから検索して
>そのリストのセルからコピーをスタートしてくれるようにしたいのですが
おまえ、VBAコード組んだこと無いだろ?
質問するような内容じゃないだろ。

>そのセルの値をリストから検索して
は?現在のワークブック上のシート名はワークブックオブジェクトが
保持してるでしょ。なんだよリストって。

ふざけんなよ。社会の迷惑だ、退職しろ。
840名無しさん@そうだ選挙にいこう :03/02/11 23:56
こんなアホが職を得ているのか.........
日本が景気低迷している理由がわかるね
>説明がわかりにくいかもしれませんがお願いします。

いい加減にしてよね。貴方いつもここで質問して
「説明がわかりにくいかもしれませんがお願いします。」で締めてるでしょ。
中学生なの?自分で考える頭もないの?
>838

Sub eee()
Dim r
 On Error GoTo ER:
 Set r = Application.InputBox _
  ("範囲指定すれ", "ほれ", ActiveCell.Address, Type:=8)
 r.Copy Destination:=Worksheets(2).Range("A1")
ER:
End Sub

>839-841

失恋でもしたのか?
843835:03/02/12 00:25
ありがとうございます。>837さん
がんばってみます。
本当に助かりました。
知ってたらごめんなさい
845名無しさん@そうだ選挙にいこう:03/02/12 01:45
>842 ありがとうございます
   やってみます

846835:03/02/12 13:39
837さんの助けでなんとか途中まではできたんですが
その処理を【AF6】〜【AF34】【AJ6】〜【AJ34】へ
do loop とか for nextで処理するにはどのように
おこなえばいいんでしょうか?
また、上の処理の中でブランクセルは処理をおこなわない
ようにもしたいんですがどうしてもわかりません。
ご存知の方がいらっしゃれば教えていただけませんか?
よろしくお願いします。
847ぶうびい:03/02/12 16:43
>>846
そもそもVBAで処理しなきゃなんないのかなあ?
数式でいいんでないの?

#それに Excel でのVBAの基礎的な知識がないと
#思われるので、そこんとこきちんと勉強してほしい
#なあとかとも思う。
848名無しさん@そうだ選挙にいこう:03/02/12 17:14
すいません。
excel2000とexcel97の互換性について、
http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/408/8/75.asp
コレのようなものは無いんでしょうか?
849848:03/02/12 17:34
あ、すいません。
全然状況説明してなかったですね。
excel2000で作成したVBAがexcel97上だと中途半端に動くんです
csvから読んだデータをシートに吐き出したあと、
range.copyで背景などを持ってきているのですが、この部分が動いたり動かなかったりしているみたいなんです。

ttp://keep-on.com/excelyou/2000lng4/200003/00030143.txt
コレとは違って、エラーが発生してくてさっぱりわからなくて互換性を調べようと思ったらまとめてあるページが見つからなくて、という次第です。
on error resume next してあるということも無かったです。
850名無しさん@そうだ選挙にいこう:03/02/12 17:57
851名無しさん@そうだ選挙にいこう:03/02/12 19:37
1からXまでの数値を、重複しないようにA列にランダムに振分ける
ことはできますでしょうか?教えて下さい。お願いします。
↓みたいな感じで

A列
2
15
105
158
3
(以下略)
852名無しさん@そうだ選挙にいこう:03/02/12 19:54
>出来ますでしょうか?

出来る。

これでチミの願い事はあと2つだ。
853851:03/02/12 20:11
>>852
教えて頂ければ嬉しいのですが、だめですか?
854名無しさん@そうだ選挙にいこう:03/02/12 21:20
>だめですか?
だめではない。
これで残りはひと〜つ...



なんちって。
A列に1からXまで順番に入れておいてシャッフル汁。
855851:03/02/12 22:24
>>854
そのシャッフルの仕方が分からないのですが・・・

記述を書いて下さい。最後のお願いです。
856名無しさん@そうだ選挙にいこう:03/02/12 22:38
>>851
もったいぶったハゲなんかにおながいするな。
俺が教えてやる。

A列に1から連番を振っておいて、B列に=RAND()として、A列B列を
B列をキーに並べ替えればいいよ。

こんなのもあるぞ!
http://www2.moug.net/cgi-bin/technic.cgi?exvba+TI05020060
857not 854:03/02/12 22:39
>>855
分からなくてもちょっと調べれば分かるのに・・・
tp://www.google.co.jp/search?q=vba+重複しない乱数
中身は全然見てないから使えるかどうか分からないけど。
858  :03/02/12 22:42
>>855
B列に乱数をセットし、B列でソートしる
859851:03/02/12 22:54
>>856
助かりました。ありがとうございました。
860名無しさん@そうだ選挙にいこう:03/02/12 22:57
>>857
下手糞なのでパスワードをかけて見れなくしてるみたいだが晒してみる。
1回では書けないので2回に分ける。

Sub MyRandom()
Dim MyMaxRow As Long
Dim MyMaxRowb As Long
Dim MyRow As Long
Dim MyRnd As Long
Dim i As Long

If Range("A2").Value = "" Then Exit Sub
MyMaxRow = Range("A65536").End(xlUp).Row
MyMaxRowb = Range("B65536").End(xlUp).Row
Range("B2:B" & MyMaxRow).Value = ""

With Application
Do While Range("B" & MyMaxRow).Value = "" 'B最下行が空白の間実行
 Randomize '乱数ジェネレータを初期化
 MyRnd = Int(((MyMaxRow - 1) * Rnd) + 1)  'A列の行数分-1の乱数
 For i = 2 To MyMaxRowb '今までの値と同じ値かどうか
  If MyRnd = Cells(i, 2).Value Then Exit For
 Next 'ループが最後まで終わったら重複していない
  If i = MyMaxRowb + 1 Then 'iの最大値
    MyRow = MyRow + 1
    Cells(MyRow + 1, 2).Value = MyRnd 'セルに値
  End If
861860の続き:03/02/12 22:58
'ステータスバーに進行状況表示
.StatusBar = "処理中・・・ " & Format(MyRow / MyMaxRow, "0%") & _
  " " & Application.Rept("■", Int(MyRow / MyMaxRow * 15))
Loop
.StatusBar = False
End With
Worksheets(1).Name = "BearWeb-hobby59"
End Sub
862857:03/02/12 23:05
>>860-861
うわぁ。もろ力押し・・・。
バブルソートかクイックソートのどちらかを使っていると思っていたのに。

VBA初級〜中級くらいか?

863860:03/02/12 23:13
>>862
VBA初級〜中級くらいか?
そんなところかな。
しかし856のMougのもひどいね。
864名無しさん@そうだ選挙にいこう:03/02/12 23:32
(´・ω・`)
もったいぶったハゲにされちまった...
一連のやりとりにワロタ(w
866862:03/02/12 23:45
>>863=860
>>856のMougや>>860-861が書ければ(処理速度は遅いけど)
目的は達成できるから良しとしましょう。

それに一瞬で終わるコードだと、素人にすごさが分かってもらえないし。(w
>>866
なんか偉そうだな。
回答してから言えよ。
ソート使わずとも
For i = 1 To UBound(tbl1)
  tbl1(i) = i
Next
Randomize
j = 1
For i = UBound(tbl1) To 1 Step -1
  k = Int(Rnd() * i + 1)
  tbl2(j) = tbl1(k)
  tbl1(k) = tbl1(i)
  j = j + 1
Next
>>868
うん、エレガント!
870862:03/02/13 01:36
>>867
後先になるけど、言われっぱなしは癪なので。
Sub aaa() '要Microsoft Forms 2.0 Object Library参照設定
 Dim myCol As Collection, myDO As MSForms.DataObject
 Dim strArray As String,lngMax As Long, tmp As Long, k As Long
 On Error GoTo ErrorStop
 lngMax = Abs(Application.InputBox("自然数のみ", "Input Number", 100))
 On Error GoTo 0
 Set myCol = New Collection
 Set myDO = New MSForms.DataObject
 Randomize
 For k = 1 To lngMax
  myCol.Add k
 Next k
 k = 0
 Do
  tmp = Int(Rnd() * myCol.Count)
  strArray = myCol(tmp + 1) & vbCrLf & strArray
  myCol.Remove tmp + 1
  k = k + 1
 Loop Until myCol.Count = 0
 With myDO
  .SetText strArray
  .PutInClipboard
  Range("B1").PasteSpecial
 End With
 Set myCol = Nothing
 Set myDO = Nothing
 Exit Sub
 ErrorStop:
 MsgBox "自然数のみ"
End Sub
871860:03/02/13 07:46
>>862
なんか面倒なことやってるような気が。
>tmp = Int(Rnd() * myCol.Count)
これ大丈夫?
>>868
>For i = UBound(tbl1) To 1 Step -1
For i = UBound(tbl1) To 2 Step -1
でいいよ。
最後はどうせ交換はおきないんだから。
どうせ質問者は配列は分からないだろうから初心者向けにCellsを使うと
こんなカンジダ。
Sub hage()
  Const x As Long = 100
  Dim i As Long
  Dim RndNum As Long
  Dim TempBuffer As Long
  
  Columns(1).ClearContents
  For i = 1 To x
    Cells(i, 1).Value = i
  Next
  Randomize  
  For i = x To 2 Step -1
    RndNum = Int(Rnd * i + 1)
    TempBuffer = Cells(i, 1).Value
    Cells(i, 1).Value = Cells(RndNum, 1).Value
    Cells(RndNum, 1).Value = TempBuffer
  Next
End Sub
872860:03/02/13 07:53
>>868
スマソ。別の配列を用意してたのか。
交換じゃないから、それでよさげだな。
変数の宣言くらい書いてくれたらすぐ気が付いたんだが。

言い訳だな。
873860:03/02/13 08:11
またまたスマソ。
>>862
>>tmp = Int(Rnd() * myCol.Count)
>これ大丈夫?
Removeしてるからちゃんと動的に変化してるみたいね。
大丈夫みたいだな。正直すまなかった。
首吊るわ。
874860:03/02/13 08:51
あら捜しばっかりですまんが、
>strArray = myCol(tmp + 1) & vbCrLf & strArray
Excel2000以上なら、配列に格納しておいてJoin関数で結合文字列作った方が
いいんでないの?
50000個くらいあるととかなり遅くなるぞ。
Excel97ではJoin関数はないからMidステートメントで結合することになるが。

それより配列オンリーの方がいいと思うが。
DataObject+クリップボードは遅いよ。
配列オンリーだと50000個でも1秒かからん。
875862:03/02/13 19:29
>>874=860
ありがと(久々に「研究板」っぽい雰囲気になったよ。)
Join関数のこと忘れてた・・・
Upはしないけど、個人的に作り直すよ。

ところで、配列オンリーだとどのようにするの?
Variant変数に2次元配列で代入して、
Range(***)=Variant変数 で転記するってことですか?
876860:03/02/13 20:14
>>875
868みたいに二つの配列でやらないで一つの配列でやるならこんなとこだ。
0.2秒くらいだったよ。

Sub hage2()
  Const x As Long = 50000 '色々変えてみるべし
  Dim i As Long
  Dim RndNum As Long
  Dim Temp As Long
  Dim Buf() As Long

  ReDim Buf(1 To x, 1 To 1)
  For i = 1 To x
    Buf(i, 1) = i
  Next
  Randomize
  For i = x To 2 Step -1
    RndNum = Int(Rnd * i + 1)
    Temp = Buf(i, 1)
    Buf(i, 1) = Buf(RndNum, 1)
    Buf(RndNum, 1) = Temp
  Next
  With Columns(1)
    .ClearContents
    .Resize(x).Value = Buf
  End With
End Sub

でも860の晒しは可愛そうなことしたな。
書くんじゃなかった。ってもう遅いか。
女性のような気もする。
877862:03/02/13 21:26
>>876
むちゃくちゃ参考になりますた。
特に2次元配列と配列をセルに転記する方法が!!!
(質問者じゃないんですが。)ありがとうございました。
878名無しさん@そうだ選挙にいこう:03/02/13 23:35
Sub 最終行()
Dim i
i = Cells(Rows.Count, ????).End(xlUp).Row
MsgBox "最終行は、" & i
End Sub

????のところをいま選択している列にしたいのですが、
なんと書けばいいですか?
879デフォルトの名無しさん:03/02/13 23:37
ACTIVECELLS
>>878
なんでもいいんじゃない?
「1」とか。
881名無しさん@そうだ選挙にいこう:03/02/13 23:54
どうもです

>>879
それだと動きませんでした。デバッグするとその行がエラーになります。
>>880
それだとワークシート全体で検索されてしまうようです。
選択している列の最後の行を調べたいのですが、
どう書けばいいんでしょうか?
>>878
selection.column
883名無しさん@そうだ選挙にいこう:03/02/14 00:08
>>882
ありがとうです。
i = Cells(Rows.Count, ????).End(xlUp).Row
で取得した最終行まで、1行目からオートフィルしたいのですが、
Selection.AutoFill Destination:=Range(????)
レンジはどうかけばいいですか?
884名無しさん@そうだ選挙にいこう:03/02/14 01:34
今までVBの経験はありましたが、VBAは初めて作る事になったものです。
今日、作りかけのプロジェクトを預かってきたのですが
(オフィスXPで作ったもの)
うちのPC(オフィス97)で実行すると、不正な処理云々。。と出て
途中でエクセルが落ちてしまいます。
落ちるところは、普通にラベルのキャプションに文字を代入したり
するところだったりして、特に変な処理をしているようでも無さそうでした。
これはうちのオフィスのバージョンが古いせいで起こっているのでしょうか?
それとも、なにか設定しなければいけないところがあるのでしょうか?
>>883
Sub 最終行()
  Dim i As Long
  i = Cells(Rows.Count, Selection.Column).End(xlUp).Row
  MsgBox "最終行は、" & i
  With Selection
   Cells(1, .Column).Select
   Selection.AutoFill Destination:=Range(Cells(1, .Column), Cells(i, .Column))
  End With
End Sub
886名無しさん@そうだ選挙にいこう:03/02/14 11:27
>>884
オフィス97のエクセル(つまりエクセル97)で作ってXPで動かないと言う事はないが
XPで作って97で動かない事はよくあるぞ。
XPでサポートしている部分が97には無いというのが結構あるからな
おとなしくXPにするしかない
>>886
便乗質問
2000で作って97で動かないというのもやっぱりあります?
888名無しさん@そうだ選挙にいこう:03/02/14 16:47
多分あると思うよ。
全部のオブジェクト使ったこと無いけどというより全部使うことなんかあたしにゃ無理だ
>>887
当然あるよ。
でも、XPと97ほどの違いは無いから、そんなに神経質にならなくていいかも。
それじゃ、気をつけるようなことがあったら教えてもらえませんか?
2000の新機能を使わなければ平気ですか?
>>885
丁寧にありがとうございます。

CellsとRangeの使い方が、すこしわかりました。

VBA初心者で、まだあまりわかってないんですが、
.Columnとか見るとthisの省略みたいな使い方が
できるんですね。


>>891
> .Columnとか見るとthisの省略みたいな使い方が
> できるんですね。

わかってると思うけど。
With ○○ 〜 End With の間に記述した部分において、○○が省略できる。
以下の【1】と【2】は同義。

【1】
Selection.Color
Selection.Font

【2】
With Selection
 .Color
 .Font
End With
>>892

>With ○○ 〜 End With の間に記述した部分において、○○が省略できる。

やっぱりわかってなかったようです^^;;
With ○○ 〜 End With だからできるんですね。

Selection.Columnをつかったので、this.Column
だと思っていました。

ちなみに、Selectionも最初はかなり戸惑いました。
オブジェクト.メソッドみたいな理解をしていたので
すが、Selectionプロパティと書かれていて、あまり
まだ理解できていません。適当に使っています。

いろいろありがとうございます。VBAはコードをあつめた
本は豊富なんですが、文法書というのはあまりないん
でしょうか。悪乗りして質問してすいません。
>VBAはコードをあつめた本
一般に駄目な本って言わない?
最近見てないから知らないけど、プログラマ板の参考図書/HPスレならいくつかあるんじゃないかな。
>>893
>>894氏も言ってるけど、そういう本を最初に見るのはどうかと。
基本を身に付けてから使った方がいいと思う。
せめて、人のコードに簡単な改造を加えるぐらいできるようになって
からの方がいいよ。
>>894-895
そうですね。いまはコピペしたコードを改造して使っているのですが、
Javaの知識で改造しているので、Withステートメントはよくわかり
ませんでした。自分で悪戦苦闘してつくったのはFor Nextを使いました。
Rangeオブジェクトはつかいこなせず、Cellsのみでループをまわして
処理しました。

プロパティとオブジェクトの違いがよくわかってなかったり、クラスの表
とかもなく、困っています。VBAの文法書はム板で聞いてくることにします。
みなさんヘルプ頼みなんでしょうか。
897名無しさん@そうだ選挙にいこう:03/02/14 22:26
>>896
googleで検索するとかなりの確率でコードに引っかかるよ
>クラスの表
オプションでヘルプに追加出来たんじゃなかったかな。
漏れは単純にプロパティ==メンバ変数と読み替えながら考えてるがやはりいまいちつかめてない(c++初心者厨)
899名無しさん@そうだ選挙にいこう:03/02/15 14:21
Excel for Mac 2001でVBAの勉強を始めた初心者です。
マック用のVBA入門書を探し出せず、Windows版の本でやってるのですが
関数や引数を入力後に出てくる(という)「自動クイックヒント」
「自動メンバ表示」などの入力支援機能が効かないようなのです。
それともデフォルトでは無効になっていて、なんか方法があるのでしょうか?
もしその辺ご存知の方がありましたらご教授下さい。
やっぱりマックで勉強ってのが無理なのかな・・・
Windowsでは、VBEの画面で ツール(T) オプション(O).. 編集のタブのところで
□自動メンバ表示 のところにチェックをつけたら出てきますが。
あと、CTRL + Jでも出てきますが。
>>897-898
Javaは厨です。

VBAは変数の宣言がなくても使えたりと独特の文法の体系を
有していると思うんですが、JavaやC++みたいな意味での文法
を解説した本ないですね。
ム板で聞いたのですが、なんか無いような・・・。
もっぱらGoogle頼みです。

よく知らないのですが、VBとVBAの文法は違うのでしょうか?
>>901
> VBAは変数の宣言がなくても使えたり
変数の宣言をOption Explicitで強制するのが普通。

大きな本屋に行っていくつか本をあさってくれば希望の本くらい見つかるよ。
903899:03/02/15 18:15
>900さん
アドバイス有難うございます。・・でもどーもダメみたいです。
昔のプログラマのように、鬼のように手入力することにします。
904900:03/02/15 19:32
EXCEL98forMacでは機能として最初から無いみたいですな。
ttp://www.ed.kagawa-u.ac.jp/~akiyama/mac/News/arc98/19980907.html

漏れWinだけど手入力してますよ。メンバ表示うざいから。
905名無しさん@そうだ選挙にいこう:03/02/15 21:52
Set ws = Worksheets.Add
で新しいワークシートを作れることがわかったんですけど、
変数の宣言は
Dim ws As String
でいいですか?
>>905

Worksheetオブジェクトなので

Dim ws as Worksheet
>901
>VBAは変数の宣言がなくても使えたりと独特の文法の体系を
basicはfortranの影響を受けていて、暗黙の型宣言が残っている。
悪しき慣習だ。

あとvbaではclassがつかえるよ。継承が無いなど、本格的なOOPは出来ないけど。
908名無しさん@そうだ選挙にいこう:03/02/15 22:27
Const datasheet As String = "実験データ"
'データの入っているワークシート名を変数に格納したつもり

Worksheets(datasheet).Cells(1, 1).Select

↑こうすると、この行でエラーが出ます。なんででしょうか?
>Const datasheet As String = "実験データ"
>'データの入っているワークシート名を変数に格納したつもり
格納したつもりであって、格納されてないよ
910名無しさん@そうだ選挙にいこう:03/02/15 22:37
>>909

うっ!?やはり格納されていないですか?
もしよろしければ、書き方を教えてください。

>>908
Constの部分はおいといて、
datasheetがアクティブじゃないとSelectできません。
Selectして何をするのかは知りませんが、Selectしたいなら、
 Worksheets(datasheet).Select
 Cells(1, 1).Select
と2回に分けましょう。
912名無しさん@そうだ選挙にいこう:03/02/15 22:49
>>911
ありがとうございます!

Constのほうは、もとのシート名のカタカナ部分が半角でした。
全角に統一したら動くようになりました。

ふむ、ワークシートをSelectして何をするのか考えてませんでした。

datasheetのA1セルを選択したいので、そう書いていました。
>ふむ、ワークシートをSelectして何をするのか考えてませんでした。
おぬし、笑いの心得があるとみた!俺も来週事務所で使ってみよう!
914名無しさん@そうだ選挙にいこう:03/02/16 14:47
xlUpとかxlToUpとかxlLeftとか、xlなんとかってのは
どういう意味なのでしょうか?

>>914
Excelじゃない?
>>915
914はもう戻ってきません
917名無しさん@そうだ選挙にいこう:03/02/17 18:22
ところで質問なんですが、
マクロを開始すると他のどのボタンも(一時停止や停止ボタンでさえ)
操作できません。マクロが終わったりエラーで止まったりするまで。
これは私のエクセルだけの問題なのでしょうか。
この一時停止ボタンは何の為にあんだろうと
いつも不思議でしょうがありません。
だれか解決の手段を教えてください。
また、あるユーザフォームのあるコマンドボタンを押すと
マクロが途中停止するようなコードなどできないものでしょうか。
よろしくお願いします。
918名無しさん@そうだ選挙にいこう:03/02/17 19:15
すいません。質問です

nRows = Sheets(1).UsedRange.Rows.Count

Do Until ふぁいるはんどる.AtEndOfStream
 nCurCol = CInt(ファイルから読んだデータ)
 Range("F1:F" & nRows).Copy Cells(1, nCurCol)


Excel2000でこのようなVBAを作ったのですが、事情によりExcel97で動かすことになりました。

Excel2000ではセルの罫線や背景色がコピーできていたのですが、
Excel97では罫線、背景色がコピーできていません。
MSDNもあたってみたのですが、copyメソッドについての互換性は見つけられませんでした。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnexcl2k/xlWhtsNw.asp

上記のコードで書式をコピーできない理由か、他の方法で書式をコピーする方法があれば教えてください。よろしくお願いします。
919918:03/02/17 19:36
すいません。書式だけでなく値もコピーできていませんでした。

Range("F1:F" & nRows).Copy Cells(1, nCurCol) のcopy先の指定が足りないのかと思い

 Range("F1:F" & nRows).Copy
 Range(Cells(1, nCurCol), Cells(1, nCurCol)).Select
 Selection.PasteSpecial Paste:=xlPasteAll

などとやってみましたが、やはりコピーできませんでした。
エラーも出ていないので、素通りしているような感じです。
920まい♪:03/02/17 22:32
Range(Cells(1, nCurCol), Cells(1, nCurCol))

Cells(1, nCurCol)
でいいし、Selectする必要は全くないです。

AtEndOfStreamということはFSOをつかってるみたいだけど、何をしたいのかいまいちわかんね。
ただ、エラーになっていないと言うことはコピーを一度もしてないのではないかと思われるので、
Do Until ふぁいるはんどる.AtEndOfStream
  MsgBox "LOOP"
    処理いろいろ 
Loop
とかでちゃんと動いているのかどうかを確認してみたら?
922918:03/02/18 12:06
レスありがとうございます

問題の処理は、
ファイルにはrow、col、データが一行に一つ(col順で)入っていて、
新しいcolに移動したときに一つの前の行から罫線ほかをコピーする処理です

copy/pasteする途中に、debug.printでnCurColを出力させたところ、
処理としては必要なときにしっかり通っているようです。

Range("F1:F" & nRows).Copy Cells(1, nCurCol)も他の方法もデバッグモードでは確かに通っているのですが、copyが動作しているように思えません。
ネット上にあるようなサンプルを見るとコレで動くと思うので、根本的なところで単純なミスをしているのかも…

.copyできたかどうかを確かめる方法とかはありませんか?
Range("F1:F" nRows) は何かヤだな。
Range(cells(1, 6),cells(nRows, 6)) に汁。


924名無しさん@そうだ選挙にいこう:03/02/18 16:59
ところで質問なんですが、
マクロを開始すると他のどのボタンも(一時停止や停止ボタンでさえ)
操作できません。マクロが終わったりエラーで止まったりするまで。
これは私のエクセルだけの問題なのでしょうか。
この一時停止ボタンは何の為にあんだろうと
いつも不思議でしょうがありません。
だれか解決の手段を教えてください。
また、あるユーザフォームのあるコマンドボタンを押すと
マクロが途中停止するようなコードなどできないものでしょうか。
よろしくお願いします。

[Ctr]l+[Pause]
926918:03/02/18 17:50
>>923
直しました。

上のコードに問題はないですよね?
なんで動かないんだろう…
>copyできたかどうかを確かめる方法
クリップボード開いておけば?
928918:03/02/18 19:22
>>927
クリップボードってアクセサリあたりに追加していれる奴ですよね?
とりあえず無かったんで、クリップボードの中身を配列にしてイミディエイトに吐き出してみました。
結果、Excel2000ではxlClipboardFormatText以外の各種プロパティにデータが入っていたんですが、
Excel97では何もデータが入っていませんでした。

.copyでコピーできていないようです。
Excel2000とExcel97の互換性とも思えないので、
Excel97でVBAを作るときに引っかかりがちなミスなどないでしょうか。
>>928
3点ほど質問。

On Error 〜が記述されていないか?
SCRRUN.dllは使えるのか?参照設定がされているのか?
ループごとにコピーする必要があるのか?
んぢゃあ、これは?

Range(Cells(1, 6), Cells(nRows, 6)).Copy (Cells(1, nCurCol))
931918:03/02/18 20:21
>>929
1.On Error〜は初めにあることを確認したので全置換でコメントアウトしてあります

2.SCRRUN.DLLというのははじめて聞きましたが、どういうものなのでしょうか?
SCRRUN.DLLで検索したらsystem32以下にありました。

3.ファイルの中身を見るまで横にどれだけ伸びるかわからないんです。
ので、必要に応じて列の書式をコピーするようになっています。今のところコピーが出来ていないんで終わってますが…

>>930
試してみましたが、駄目でした。
コピー対象を()で囲むことでいいことがあったりするのでしょうか?


わからないのが、同じExcelをExcel2000の入っているPCで開くと正常に書式がコピーされるということです。
>>931
(2)FSOを利用するために必要な外部dll
Excel側からScrrun.dllの参照設定をする必要あり。

(3)そもそも書式のコピーだったらPasteSpecialで良いのでは?

そもそもループに入っているの?
Do Until ふぁいるはんどる.AtEndOfStreamだから、
EndOfStreamだったら、ループはされないよね?
933932:03/02/18 20:42
×Scrrun.dllの参照設定
○Microsoft Scripting Runtimeの参照設定
934918:03/02/18 20:53
>>932
1.Microsoft Scripting Runtimeの参照設定
なかったので追加してみましたが、変わりませんでした。
浅間のほうに
Set fs = CreateObject("Scripting.FileSystemObject")
とかありました。

3.元がPasteだったのでそのままでしたけど、PasteSpecialでも問題ないですね。さっき試したときはやっぱり動きませんでした

4.ループには入っています。デバッグモードに入って確認もしました。
ファイルに入っている数値は正しく表示されています。
935名無しさん@そうだ選挙にいこう:03/02/18 20:57
>コピー対象を()で囲むことで...
excel97のマヌアルに
Copy([destination])
とあったもんだから、、、ヒョトしなかたね、問題は別ントコみたい。
あとよろ。
936918:03/02/18 21:01
>浅間のほうに
宣言のほうに
です。自分で読めなかった^^;
>>934
On Errorをコメントインしてステップ実行(F8)してみて。
これ以上は現物見ないと分かんないよ。

# コピーペーストが動作しないだけなら、あきらめて直接書式を設定したら良いのでは?
938918:03/02/18 21:33
>>937
すいません。上で書いたデバッグモードというのはステップ実行のことでした。

新しく作ったxlsに同じようなコードをThisWorkBookに書いたら実行されたので、
上のコードが書いてあった場所(標準モジュール)が悪いのではないかとかやってます。
そのあたりで2000と97の動作が微妙に違う、ということみたいです
ありがとうございました。

どうしても駄目なときは直接書式を書き込むことにします。
対象シートが違ってるとかは?

With Sheets(1)
  nRows = .UsedRange.Rows.Count
  Do Until ふぁいるはんどる.AtEndOfStream
    nCurCol = CInt(ファイルから読んだデータ)
    .Range(.Cells(1, 6), .Cells(nRows, 6)).Copy .Cells(1, nCurCol)
    略 
  Loop
End With
940918:03/02/19 21:38
すいません。主に報告ですが、長文になってしまったので分けて書きます。

落ち着いて試してみたところ、
JavaScriptからVBAでそのxlsファイルをopenするのですが(全く気がついてませんでした。IEからクリックして起動してたのに…)、
windwosから手動で起動したところ普通にコピーできました
上の方で書いたコードは Workbook_Open からcallされた関数です。
起動時にWorkbook_Openでコピーに失敗したあと、マクロから書式をコピーするあたりの関数を呼んだら綺麗にコピーされました。

ということで、Workbookやらopenやらで探してみたところ、こんなものがありました
http://support.microsoft.com/default.aspx?scid=kb;ja;JP410059

jsでExcelを呼ぶ部分のコードは

<script language="javascript">
var xlApp=null;
var Xpath_xls = 'http://hogehoge/SPC2006.xls';
xlApp = new ActiveXObject("Excel.Application");
xlApp.Workbooks.Open (path_xls,true,true,true,null,null,null,true,null,null,false,false);
〜〜略
941918:03/02/19 21:39
という感じでVBAで開いていたので、
上の [XL97]Openイベントで実行されないメソッドおよびプロパティ が原因だったようです
回避策としてAuto_Openを使えとありますが、Auto_Openは(他から呼ばれるので)実行されない、ということでした。
試しに
xlApp.Workbooks(path_xls).RunAutoMacros ("xlAutoOpen");
というコードも試してみたんですが、「RunAutoMacrosメソッドが失敗しました」などと言われたので強制的に指定してもAuto_Openは動きませんでした。


>>939
昨日、Sheetも試してみましたがダメでした。

ということで、Excel2000なら修正されていたために97で動かなかった、ということのようです。
ありがとうございました
# なんとかExcel2000で動かす方向に持っていきたいと思いますが、
# 起動時にWorkbook_openもAuto_Openも使わずに関数を走らせる方法があるならどうか教えてください。
>>941
JavaScriptの知識はないから的はずれかもしれないけど参考まで。
---WordからExcelのマクロを実行するコード---

Sub testOpen()
 Dim objXL As Object
 Dim strWBpath As String
 Set objXL = CreateObject("Excel.application")
 strWBpath = ActiveDocument.Path & "\" & "Book1"
 With objXL
  .Visible = True
  .workbooks.Open strWBpath
  .Run "'" & strWBpath & "'" & "!Auto_Open"
  .activeworkbook.Close savechanges:=False
  .Quit
 End With
 Set objXL = Nothing
End Sub
943918:03/02/20 12:51
>>942
jsで
xlApp.Run ('Auto_Open_');
でいけました。ありがとうございますm(_ _)m
944名無しさん@そうだ選挙にいこう:03/02/20 20:30
エクセルVBA無くなるって聞いたけど本当かな?
どこで。
946高森千里:03/02/20 20:56

マクロで、共有ブックの使用確認する方法ってありますか?
共有ブックを自分以外誰も使用してないときに処理したいのです。

よろしくお願いします。
・オープンしてみる。
・エラーチェック。
948名無しさん@そうだ選挙にいこう:03/02/20 21:49
何千行もデータの入ったファイルのセル一つ一つに対して
一定の処理をする、というプログラムを作成しているんですが、
実行時間がかかりストレスとなるので、『今何行目を処理している』
というような表示を作ろうかと思っています。
で、その表示をユーザーフォームを使ってダイアログのように
しようと考えているんですが、他にもっといい方法があったら教えてく下さい。
>>948
Application.Statusbar
>>948
プログレスバー。
951名無しさん@そうだ選挙にいこう:03/02/20 21:59
range(A1:A4)をcells(○,□)または、A1をa A4をbと決めた時
の表現の仕方はありますか?
教えてください。お願いします。
>951

何が言いたいのか良くわからんけど、こんな意味?

Sub aaa()
 MsgBox Range(Cells(1, 1), Cells(4, 1)).Address(0, 0)
 a = "A1": b = "A4"
 MsgBox Range(a & ":" & b).Address(0, 0)
End Sub
953951:03/02/20 23:33
>952さん
ありがとうございます。
説明不足でした。。。
たとえば
列を colpos=Day(Date + 1)
と、設定します。
この列の1から120行目をセレクトしたい場合の表記方法を教えて
いただけませんか?
お願いします。

一行目をselectしてからresize()じゃ駄目?
955952:03/02/21 00:06
>953

最初の回答とほぼ同じだが、、

Sub aaa()
Dim colpos As Integer
 colpos = Day(Date + 1)
 With ActiveSheet
    .Range(.Cells(1, colpos), .Cells(120, colpos)).Select
 End With
End Sub

954さんの方がスマートかな、、

Sub bbb()
Dim colpos As Integer
 colpos = Day(Date + 1)
 With ActiveSheet
    .Cells(1, colpos).Resize(120, 1).Select
 End With
End Sub
956951:03/02/21 00:27
>952さん
>954さん
ありがとうございました。
セルをひとつずつコピペするという作業をしていたので、
早くなりました。
ありがとうございました!!!
 

957名無しさん@そうだ選挙にいこう:03/02/21 13:59
VBA初心者の質問です。
ユーザーフォームを作っているのですが、
「ファイルを開く」ボタンをどうやって作ればいいのかわかりません。
ユーザーフォームの中で、読み込むファイルを指定したいのですが・・・
皆さん宜しくお願い致します。
958名無しさん@そうだ選挙にいこう:03/02/21 15:16
>>957
コマンドボタンを作って、それに対応したスクリプトを書く

Private Sub CommandButton1_Click()
なんちゃら
End Sub
>>958
( ´,_ゝ`)プッ
960名無しさん@そうだ選挙にいこう:03/02/21 18:10
スクリプト−−!
>957

Application.GetOpenFileName
962bloom:03/02/21 19:49
963名無しさん@そうだ選挙にいこう:03/02/21 20:21

「このまま一生彼女ができないのでは…」

 私は社会学を専攻している者です。社会学や周辺の学問を利用し、実践的な
恋愛理論を開発しております。机上の空論に終わらず、あくまで実践的。効果
は絶大です。この理論は私自身の苦悩から生まれました。モテないことに深く
悩んでいた私は社会学部に入り、恋愛をはじめとするコミュニケーションにつ
いて考察することを決意。開発期間およそ6年。やっと研究が実を結びました。
ルックスなんて恋愛に関係ないということを自ら証明したのです。今回はその
集大成を公開しようと、メールマガジン発行を決めました。すでに数回発行し
ておりますが、購読者にはバックナンバーが閲覧できますのでご安心を!

 今ならまだ間に合います。春、出会いの季節に幸せが訪れるかどうかは、あな
たの選択次第です。絶対に後悔はさせません。「90日彼女ゲットプログラム」
もちろん購読は無料! → → http://www.h5.dion.ne.jp/~psysys/index.html
964名無しさん@そうだ選挙にいこう:03/02/21 20:40
どこかで見たのだけど
EXCELのVBAもVBA.NETになって
現行のVBAが無くなると聞きました。

VBAとVBA.NETは別物とも聞いたのですが…
どこで。
>>964
名前が変わるだけだろ。
Office2000→OfficeXPみたいなもんだ。
VBA.NET云々はしらんけど
VB6とVB.NETは全くといって良いほど別物だが。
寧ろVCAがいいな。classも完全準拠で。さらにansi c++だと尚よし
969名無しさん@そうだ選挙にいこう:03/02/22 02:00
>>968
うおー、それイイ! VCA!
970名無しさん@そうだ選挙にいこう:03/02/22 02:02
>>964
仮にそうなっても「参照設定」Visual Basic For Application
にチェックするだけだろ。VBAランタイムが提供されるよ。
CでExcelを操作?
馬鹿みたいな発想だな。
CとC++を区別できないおばかさんですか?
Cで関数(例えば足し算)を書いて
それをVBAから使うのって簡単ですか?

"C言語 VBA"で検索しても関係ないページがでてきてしまいます。
私がやろうとしてしることの検索キーワードだけでもいいのでご教授ください。
>>973 win32api dll stdcall vb
975名無しさん@そうだ選挙にいこう :03/02/22 19:10
質問です。

エクセルシートに表があるとして、データをキーボードで入力します。
しかし、入力値は「コード」や「商品名」などの定まった値で変化の無い
場合があります。ここに間違えて入力するのを防ぐために各セル(行数は
入力データ量によって変化)にドロップダウンリストを表示させ、そこから
選択させたいのです(オートフィルタみたいに)。リストに無い場合は
手入力優先になる必要があります。

まったく対処方法がわかりません。ポインタだけでも教えてください。
お願い致します。
>>975
「データ」→「入力規則」→「設定」タブの「条件の設定」で
「入力値の種類」に「リスト」を選択。


Excelのバージョンぐらいは書いた方がいいと思うぞ。
>>976
でもそれではリストにない場合手入力できないのでは?
978634(975):03/02/22 19:35
>>977
そーなんですよ。
>>977-978
エラーメッセージタブのスタイルを、停止以外にすれば入力できるぞ。
980634(957):03/02/22 19:56
>>979
ブック依存する方法は採用できないのです。
入力する帳票フォーマット(データ入力カラムの位置、数)
は固定ですが、ユーザはシートを新規作成しても同様な
処理を行える必要があります。
>>980
NewWorkbook(sheet)イベントで
新規作成時に入力規則を設定するマクロを組む
982634(957):03/02/22 20:42
>>981
ブックを2つ開いて他のブックからシートをドラッグしてきたときに
対応できないのではないでしょうか?
>>982
SheetActivateイベントを使え
>>982
最初にどういう環境・運用状況なのかをきちんと
説明しろよ。
回答もらう度にあれこれケチつけてるように見えて
不快だぞ。
>>980
> ブック依存する方法は採用できないのです。

ほとんどの機能がブック依存では?
>>984
同意。
最初からきちんと説明して欲しい。
もうこの件に関しては回答するのやめる。
987名無しさん@そうだ選挙にいこう:03/02/23 00:28
>もうこの件に関しては回答するのやめる。
どこで回答してんの。
988名無しさん@そうだ選挙にいこう:03/02/23 12:04
>Cで関数(例えば足し算)を書いて
>それをVBAから使うのって簡単ですか?

このレベルについて書いてある書籍ってありますか?
>Cで関数(例えば足し算)を書いて
>それをVBAから使うのって簡単ですか?

以前、適当にググッったサイトを見ながらやってみたら出来たよ>VC++でつくった足し算DLLをexcelから呼び出すの
その後配列の受け渡しが良く解らなくてほっぽってあるけど。
991名無しさん@そうだ選挙にいこう:03/02/23 17:55
質問したいから次スレたててちょうだいな。
992不動産屋Y:03/02/23 18:01
質問です。
当方、不動産屋なのですが、顧客データや物件情報のほとんどが
賃貸管理ソフトにてcsvファイルとしてはき出せる状況にあります。

このcsvファイルをエクセルのVBAにて加工してあらゆる業務ドキュメント等を
生成したいと考えてます。
例えば、、、
・賃貸ソフトより詳細で使い勝手の良い空室リスト
・同じく入力が簡易なクレーム処理報告書(物件、入居者データ等をcsvから持ってくる)
及びクレーム履歴データベース化
・物件毎の入居者連絡先一覧(簡単に項目を取捨選択できる)
・物件マスターデータからの取り込みによる物件毎の設備一覧

多分VBA使いの方々にとってはお茶の子さいさいなプログラミングだと思います。
さて、これらをメールや掲示板でのやりとりでサンプルデータからプログラムをオーダーしたいのですが、
そういうSOHOつーか、個人で承るプログラマーっていらっしゃいますか?
もしくはどこかのサイトへ行けばそう言う人との接点があるのでしょうか?
上記例の一つあたり5千円前後で発注したいのですが。

私がやりたいのは山々ですが、バカだし本業が忙しくてそれどころじゃありません。
アウトソーシングです。(w
993不動産屋Y:03/02/23 18:08
質問です。
当方、不動産屋なのですが、顧客データや物件情報のほとんどが
賃貸管理ソフトにてcsvファイルとしてはき出せる状況にあります。

このcsvファイルをエクセルのVBAにて加工してあらゆる業務ドキュメント等を
生成したいと考えてます。
例えば、、、
・賃貸ソフトより詳細で使い勝手の良い空室リスト
・同じく入力が簡易なクレーム処理報告書(物件、入居者データ等をcsvから持ってくる)
及びクレーム履歴データベース化
・物件毎の入居者連絡先一覧(簡単に項目を取捨選択できる)
・物件マスターデータからの取り込みによる物件毎の設備一覧

多分VBA使いの方々にとってはお茶の子さいさいなプログラミングだと思います。
さて、これらをメールや掲示板でのやりとりでサンプルデータからプログラムをオーダーしたいのですが、
そういうSOHOつーか、個人で承るプログラマーっていらっしゃいますか?
もしくはどこかのサイトへ行けばそう言う人との接点があるのでしょうか?
上記例の一つあたり5千円前後で発注したいのですが。

私がやりたいのは山々ですが、バカだし本業が忙しくてそれどころじゃありません。
アウトソーシングです。(w
>>993

探せばいくらでもいるだろうが、まともな人が相手にしてくれるかどうかは疑問。

ユーザーインターフェイスと紙出力のレイアウトで
あーしろこーしろと、ぐちゅぐちゅ注文つけられることは目に見えている
(きっちりと打ち合わせする気ないみたいだし)ので、
手間暇ばかりかかって5千円でしょ?

学生バイト探すのがいいんじゃない?
>>993
物件紹介料で、家賃の1ヶ月分も持っていくくせに
5000円で、そんなもん作らせるのか・・・

絶句だな。
>>993
「飯おごります」とでもいっていれば、まだ可愛げもあったのに。

5000円って中途半端。
テストデータでないのならやってもいい人いるかもね
998名無しさん@そうだ選挙にいこう:03/02/23 19:12
('A`) 1000!
>>993
5000円なんかでやってられっか(w
1000!!!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。