●EXCEL・VBAの教えて ..
[2ch|▼Menu]
80:デフォルトの名無しさん
07/01/26 07:47:17
>>79
VBならコントロール配列使うところだが、VBAのコントロールではコントロール配列に出来ないので、
連番名(標準のCheckBox1, CheckBox2, …で良い)にしておいてControlsコレクションを使う
Controls("CheckBox" & i)
イベントも取りたい場合はクラスで疑似コントロール配列を実装する

つーか、何百個ものチェックボックスを配置するインターフェイスを見直した方がいいと思うけどね
予測するに、ListBoxを
ListBox.MultiSelect = fmMultiSelectMulti
ListBox.ListStyle = fmListStyleOption
と、「複数選択可 & チェックボックス有り」で使えば済む話なんじゃないの?
ListBox.Selected(i)でチェック状況取得できるし

81:デフォルトの名無しさん
07/01/26 23:26:09
テキストを読み込みたいんです。

123 123 123 123
123 123 123 133

みたいなのは Line #で読めたんですけど

123 123 132 123 123↑123 123 132 123 123↑・・・

こういうデータは読み込めません。↑は何なのか、わかりません。
改行されてないデータはどうしたら読み込めるんでしょう?

検索しようにも↑の記号の読み方がわかりません。お手上げです。

82:デフォルトの名無しさん
07/01/26 23:40:22
>>81
> ↑は何なのか、わかりません。
お前は解るはずだ。というか調べる手段があるはずだ。
それが何なのかはバイナリエディタで見れば一目瞭然だからな

逆にこっちがわかんねーっつうの。
文字としての↑(81 AA)だってならわかるが、Line #で読めないってことは 81 AA では無いわけで
特殊文字の表現記号ならエディタによって表示が異なるので、お手上げです。

83:デフォルトの名無しさん
07/01/26 23:45:40
↑は本当はもっと横につぶれたような形をしており

コピーしてペーストすると消えてしまう謎の文字です。

バイナリエディター・・・?

調べてみます。

84:79
07/01/27 11:00:26
>>80
さっそくの回答ありがとうございます
ですがcontrols("checkbox"&i)ではエラーになりました(subまたはfunctionが見つかりません)
もしかしてワークシート上に直接配置したcheckboxだとダメですか?

実際には900行×20列の表(900人分顧客データみたいなもの)
から今回対象になる人を範囲でえらび(100番目から200番目等)
さらにその中から対象から外したい人を最左列に配置したチェックボックス
で選択して残った対象者だけで別の表を作成するというようなプログラムを組みたかった
のですが、リストボックスの方法だとちと選びづらいです
>>つーか、何百個ものチェックボックスを配置するインターフェイスを見直した方がいいと思うけどね
 おっしゃる通りですね(´・ω・`)

素直に左端に1か0を入力することで判別する方がいいかもです
チェックボックス900個も置いたらめちゃくちゃ重くなったし
 
 




85:デフォルトの名無しさん
07/01/27 11:50:41
>>84
シート上ならOLEObjectsコレクションだ
objSheet.OLEObjects("CheckBox" & i).Object.Value

Shapesコレクションからも辿れるけどね
objSheet.Shapes("CheckBox" & i).OLEFormat.Object.Object.Value

> 素直に左端に1か0を入力することで判別する方がいいかもです
の方法でも、表示形式を [=0]"";[=1]"●" とかにすれば解りやすいし

' A列をダブルクリックしたらチェック反転
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Target.Column <> 1 Then Exit Sub
  Target.Value = 1 - Target.Value
  Cancel = True
End Sub

' A列を含む範囲を右クリックしたら、その範囲全てのチェック状態を、選択範囲の一番上を基準に反転
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  If Target.Column <> 1 Then Exit Sub
  Target.Resize(, 1).Value = 1 - Target.Cells(1).Value
  Cancel = True
End Sub

などを使えば、マウスでチェック状態の切替が出来る
●の変わりに☐☑を使うことも可能
Range("A:A").NumberFormat = "[=0]""" & ChrW(9744) & """;[=1]""" & ChrW(9745) & """"

86:デフォルトの名無しさん
07/01/27 15:05:41
>>81
何らかの制御コードだろ。そのテキストを作った香具師に聞けば?
#なんとなく、改行コードの問題な希ガス。

87:デフォルトの名無しさん
07/01/27 16:18:50
VBAの命令の意味と
記述方法が書いてある辞典的なページってありませんか?



88:デフォルトの名無しさん
07/01/27 16:43:58
>>87
付属のVBAヘルプ

89:デフォルトの名無しさん
07/01/28 02:19:41
do Until xxxx <> vbnullstring
のときの
<>っていうのはどういういみですか

=とは違うの?

90:デフォルトの名無しさん
07/01/28 02:23:31
>>89


91:デフォルトの名無しさん
07/01/28 02:50:28
>>89
=とは逆の意味

92:デフォルトの名無しさん
07/01/28 09:27:17
excelのVBEを開こうとすると、VBEを開けるどころかexcelそのものが閉じてしまいます。
ウィルススキャンをしたところウィルスに感染はしていませんでした。

OS:Windows2000でexcelはexcel2000です。ちなみにwordのVBEは普通に開けます。

どうすれば正常にVBEが開けるようになれば良いのか、よろしくお願いします。

93:デフォルトの名無しさん
07/01/28 09:30:28

do Until xxxx <> vbnullstring

do While xxxx = vbnullstring

同じ意味と考えてもいいですか?


94:デフォルトの名無しさん
07/01/28 09:51:59
>>92
とりあえずブックを全て閉じた状態で試していないならブックを全て閉じてからVBEを立ち上げろ
同じく、アドインも全て外した状態で試してないなら一度全て外せ
それでダメならExcel(Office)の再インストール
上書きインストールではなく一度アンインストールしてから再インストールね
それでもダメならOS再インストール

まさかこの板に来る奴が再インストール出来ないとか面倒とかは言わないだろ

>>93
結果は同じだけど意味は違う

95:92
07/01/28 10:01:56
>>94
ご返信ありがとうございます!

一応Officeの再インストールは既に行いましたが、駄目でした。

ちなみにVBEのみの起動はどうすればよいのでしょうか?

やっぱりOSの再インストールしかないんでしょうかねぇ。。。

96:デフォルトの名無しさん
07/01/28 11:28:10
>>95
まぁがんばれ

97:デフォルトの名無しさん
07/01/28 14:31:36
EXCEL2000で
イベントプロージャー「テキストボックス名_Change」を作成したいのですが

図形作成→テキストボックスで
テキストボックスを作成したのですが

右クリックしてもコードの表示は出ません。(本には書いてあるのですが)
2000だと他の方法にしないといけないのですか


結果として
Private Sub TextBox1_Change()
をかくようにしたいのですが

98:デフォルトの名無しさん
07/01/28 14:36:44
>>97
今2000で試したけど、ちゃんと出たよ。

99:デフォルトの名無しさん
07/01/28 15:04:36
コントロールツールの方だと「プロパティ・コードの表示」がある
フォームコントロールの方だと「マクロの登録・コントロールの書式設定」がある

イベントが使えるのはコントロールツールの方
右クリックして「マクロの登録・コントロールの書式設定」が出るなら、間違った物使ってるだけ
「プロパティ・コードの表示」も「マクロの登録・コントロールの書式設定」も出ないならPCを窓から投(ry

100:デフォルトの名無しさん
07/01/28 15:05:38
できましたあああ。ありがとうございます!
ですが最終的にこっちの方法を採用させていただきました。
>表示形式を [=0]"";[=1]"●" とかにすれば解りやすいし

> A列をダブルクリックしたらチェック反転
>Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
>  If Target.Column <> 1 Then Exit Sub
>  Target.Value = 1 - Target.Value
>  Cancel = True
>End Sub

大変有益なご教示大感謝です

101:79
07/01/28 15:06:46
ミスッタ_| ̄|〇
上の100は>>85さんへのレスです

102:デフォルトの名無しさん
07/01/28 15:10:48
>>98
>>99
できました
フォームコントロールの方で書いてましt

103:102
07/01/28 15:11:19
ありがとうございました


104:デフォルトの名無しさん
07/01/28 18:28:12
URLリンク(vista.crap.jp)

105:83
07/01/28 19:38:04
矢印の正体はLFってやつでした。chr(10)とやらなんやら

なるほど・・・CR+LFじゃないとダメ・・・

まだ読み込めないけど、手がかりはつかめたんで頑張ってみます。

106:デフォルトの名無しさん
07/01/28 21:47:19
2007ってデフォルトフォーマットではマクロは保存できないんだな、店頭デモ機で試してみたんだが
VBAは後方互換で残ってるだけなの?

107:デフォルトの名無しさん
07/01/29 00:23:36
>>106
オプションで開発タブをリボンに表示するにチェックを入れると使えるよ

108:デフォルトの名無しさん
07/01/29 15:41:15
べき算って
2の2乗=4
3の3乗=27ってことですか?

109:デフォルトの名無しさん
07/01/29 16:32:45
冪乗とはいうけど冪算とは余り言わない希ガス。

110:デフォルトの名無しさん
07/01/29 21:56:03
今ExcelのマクロはほとんどVBAになっちゃってるけど、ブックにシートを追加するときに
Excel4.0のマクロシートが残ってることがわかる。やってみたいけど、誰かマスターする
方法おしえてくれないかな?解説書は売り切れてるしネットでも見当たらない。せっかく
残ってる機能だから眠らせておくのは惜しい。

111:デフォルトの名無しさん
07/01/29 22:29:47
2列のセルの文字列を一つにすることは可能?

セルA  セルB
桃     太郎    =桃太郎

112:デフォルトの名無しさん
07/01/29 22:54:34
>>111
可能だ。=CONCATENATE("桃","太郎")とすればいい。
セルA=桃、セルB=太郎なら、=CONCATENATE(セルA,セルB)でもいい。
セルが3つ以上でもやり方は同じだ。

113:デフォルトの名無しさん
07/01/30 00:00:45
>>112
それのどこがVBA?
このスレ的にはVBAで応えるべきなんじゃないのか?

114:デフォルトの名無しさん
07/01/30 00:51:21
Word/VBAの教えてスレはどこ?

115:デフォルトの名無しさん
07/01/30 00:53:40
ありがとうございます



116:デフォルトの名無しさん
07/01/30 16:21:57
すみません、ちょっと教えて下さい

マクロで、指定したセルにチェックボックスを作ったり、削除したりするには
どう書けば良いのでしょう?
VBA駆け出しで、全く分かりませんorz

117:デフォルトの名無しさん
07/01/30 18:12:08
>>116
マクロの記録を録ってみろ

その記録されたコードを見てわからなければお前にはまだ早い
精進して出直せってことで

118:デフォルトの名無しさん
07/01/30 22:59:22
>>116
表示→ツールバー→VISUAL BASIX
出ないことを祈る

119:デフォルトの名無しさん
07/01/30 23:05:19
>>111
>>112を転用で、
Application.WorksheetFunction.CONCATENATE(セルA,セルB)

VBA的に
セルA.value & セルB.value 又は セルA.value + セルB.value
&だと文字列+数値が可。+だと不可
CStr(数値) + 文字列だと文字列として結合

>116
作るのは>>117の言うとおり。
ぐぐるなら[OLEObject]もしくは[Shape]
削除はデザインモードじゃないときにやるとエクセルが壊れる。
デザインモードでなら.Deleteとか.Cutで消える。

中途半端だがかんべん。

120:デフォルトの名無しさん
07/01/30 23:55:15
はじめまして、早速一つお聞きしたいことがあります。
Function関数において最終的に表示される文字列を、
「その関数を使ったセルとは別のセル」に表示させたいのですが
どのような式を打ち込めばよいでしょう?

121:デフォルトの名無しさん
07/01/31 00:09:06
>>120
Sub abc()
Dim str As String
str = test
Worksheets("Sheet2").Range("A1").Value = str
End Sub

Function test() As String
test = "返り血"
End Function

こういうこと?

122:デフォルトの名無しさん
07/01/31 00:37:35
ありがとうございます。まさかこんな早くに答えていただけるとは思いませんでしたので驚きました。
よろしければもう一つだけお聞きしたいのですが、任意のセルをそのつど入力し
そのセルに表示させたい場合はどうしたらよいでしょう?

123:デフォルトの名無しさん
07/01/31 00:56:22
>>122
よくわからんのだけども、
任意のセル(入力するセル)の指定方法:
@クリック→任意のWorkSheetのマクロを開いて、マクロ書くスペースの左上にある
ちっちゃいコンボボックス的なやつの値を[WorkSheet]に設定、そのとなりのボックスの値を
[SelectionChange]に設定(ディフォルト)
したら、
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub
ができるから、ここに
Target.value = "返り血"
Targetは引数ね。ちなみにThisWorkBookのまくろで同じの作るとすべてのシートに適応される。
Aセルの値→
上と同じ感じで、左[WorkSheet]右[Change]に設定
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub
ができるからここに、
If Target.Row = 1 And Target.Column = 1 Then
Range(Target.Value).Value = "返り血"
End If
A1のセルの値にB2とか入れるとそのセルに返り血って入る
弱点はセル以外の値を入れるとエラーになる。克服はできるはず、考えないけど。
Bユーザーフォーム→
ぐぐってちょ。

こんなもんで。

124:デフォルトの名無しさん
07/01/31 01:01:51
いただいたヒントのおかげで何とかなりそうです。
稚拙な説明にもかかわらず丁寧に答えてくださり本当にありがとうございます。


125:デフォルトの名無しさん
07/01/31 10:03:27
excelのvbaで松井証券へ自動ログインするプログラムを組んでいるのですが
下のプログラムの最後の objIE.document.frames("CT").document.All("kidouButton").Click で
たまにエラーが出ます。エラーの原因は何かわかりますでしょうか。
下記のプログラムは、松井証券へログインし、松井証券の会員ページから
ネットストックハイスピードというソフトウェアを起動するためのものです。

Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As Long)
sub 時間待ち()  'ページの読込が終わるまで待機するための処理。
Do Until objIE.Busy = False
Sleep (200) 'CPU負荷軽減のために0.2秒間隔でIEオブジェクトをチェック。
Loop
End sub

(つづく)

126:デフォルトの名無しさん
07/01/31 10:05:56
(続き)

Sub netstock()
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "URLリンク(www.deal.matsui.co.jp)
call 時間待ち

'松井証券サイトのフォームへ、ワークシートに書かれたIDやパスなどのデータを流し込む
  objIE.document.forms("form").clientCD.Value = Worksheets("松井証券へ自動ログイン").Range("C2").Value
objIE.document.forms("form").passwd.Value = Worksheets("松井証券へ自動ログイン").Range("C3").Value
objIE.document.forms("form").easyTradeFlg(0).Checked = True
objIE.document.forms("form").submit
call 時間待ち

'松井証券ログイン後、会員ページからソフトウェアを起動するためのページへ移動
   Set objFDOC = objIE.document.frames("LM").document
For n = 0 To objFDOC.Links.Length - 1
If objFDOC.Links(n).outerText = "ネットストック・ハイスピード" Then
objFDOC.Links(n).Click
Exit For
End If
Next n

  call 時間待ち

'ボタンを押してネットストックハイスピードを起動する
objIE.document.frames("CT").document.All("kidouButton").Click

End Sub

127:デフォルトの名無しさん
07/01/31 14:47:31
セルAに入力した

Taka Toshi

という文字列を

taka_toshi

というように
小文字化と半角空白にアンダーバーを挿入して変換するようにしたいのですが
どうすればいいですか?


128:デフォルトの名無しさん
07/01/31 15:21:21
Replaceで半角スペースを_に置換して
LCaseで小文字化すればいいだけじゃん
このくらいならワークシート関数でも出来るし

129:デフォルトの名無しさん
07/02/01 22:29:54
>>125
理由はわからなそうだけども、
なんていうエラーがでてるのかはとても知りたいのでお願いします。

でも、もしかしたらもしかしたら、

Navigateで読み込み→
読み込みはじめるより先に Do Untilの条件へ行ってしまい
Sleepしない→
読み込まれる前にクリック

かも。
ループの前にSleepを入れてみてはいかかでしょう?

適当で申し訳ない。

130:デフォルトの名無しさん
07/02/01 22:30:48
さらにごめん。

Navigateで読み込みじゃなくて、
クリックで画面変更だ。

131:デフォルトの名無しさん
07/02/01 22:55:40
今日初めてExcelでマクロを作ろうとしてみました。

引数を2つ取る関数を作りたいのですが意味不明のエラーが出て
動きませんでした。

Public Sub Test()
Test2 (1, 2)
End Sub

Sub Test2(a As Integer, b As Integer)
MsgBox (a + b)
End Sub

引数を1つにすると動きます。
どこがおかしいのでしょうか?

132:デフォルトの名無しさん
07/02/01 23:27:48
>>131
VBAは自分で作った関数を使う際、
引数にかっこをつけてはいかんのです。
ので、
Test2 1, 2
で。

133:デフォルトの名無しさん
07/02/01 23:48:14
call

134:デフォルトの名無しさん
07/02/01 23:53:32
こんばんわ。
質問です。

1  ○○  0:00     
2  ○○  1:00
3  ○○  2:00
4  ○○  3:00
5  ○○  4:00
6  ○○  5:00



25 ○○  0:00


49 ○○  0:00

73 ○○  0:00

という、一時間ピッチのデーターがあります。一年分くらい。
それを、毎正時だけ欲しいのです。2〜24、26〜48の行を白紙の行に
したいのですが、この説明で分かってくれるかたいますか?
ご指導ください。




135:デフォルトの名無しさん
07/02/02 00:03:20
>>134
出力するシート名は?

136:デフォルトの名無しさん
07/02/02 00:10:24
> VBAは自分で作った関数を使う際、
> 引数にかっこをつけてはいかんのです。
ハズレ

自作関数の場合ではなく、基本的にSub、Functionプロシージャ(メソッド)を呼ぶ場合、
戻り値を取る場合とCallで呼ぶ場合以外は()を付けない。MsgBox関数の場合だとこんな感じで使う。
[1] MsgBox "test", vbOkOnly
[2] Call MsgBox("test", vbOkOnly)
[3] ret = MsgBox("test", vbOKCancel)

自作関数の場合でも戻り値を取る場合とCallで呼ぶ場合は()付けなきゃダメだし
自作関数じゃなくても、[1]のように使うときは()付けてはいかんのです。
ややこしいのは、引数一つの関数の場合。
[4] Inc hoge
[5] Inc (hoge)
Sub Inc(Value As Long)
  Value = Value + 1
End Sub
[4]の方だと変数hogeが+1され、[5]の方だと変化しない。
引数一つの関数をCallを省略し引数に()を付けて呼ぶと、引数は値渡しになる。
基本的に参照渡し値渡しは呼び出される側で指定するので、[5]は殆ど使われない。
意味も知らずに間違って使ってる奴は居そうだけどな。

137:デフォルトの名無しさん
07/02/02 00:13:03
>>135
潮位というシートで作業しています。

138:デフォルトの名無しさん
07/02/02 00:21:04
>>136
サンクス。職場では恥かかんよう気をつけるよー。

>>137
Option Explicit
Option Base 1

Sub testTwo()
Dim rng As Range
Dim outRng As Range
Dim data() As Variant
Dim cnt As Long
Dim outCnt As Long
Set rng = ActiveSheet.Range("B1")
cnt = 1
Do While rng.Row <= 10
If rng.Value = "0:00" Then
ReDim Preserve data(cnt)
data(cnt) = rng.Offset(0, -1).Value
cnt = cnt + 1
End If
Set rng = rng.Offset(1)
Loop
Set outRng = ActiveWorkbook.Worksheets("潮位").Range("D1")
For outCnt = 1 To cnt - 1
outRng.Value = data(outCnt)
Set outRng = outRng.Offset(1)
Next
End Sub

とりあえずD列に出してみた。
別シートに出力の際は潮位のところをそのシート名に変更すればよし、あとそのとなりをA1にするとA列にでる。

139:デフォルトの名無しさん
07/02/02 00:25:16
ごめん。

Do While rng.Row <= 10

Do While rng.Row <= 65500
あたりに変えといて。
ちなみに検索する行の最大数。

あと、なにも出力されないようなら、
if rng Value = "0:00" Then

0:00 の部分をセルに表示されてる値ではなくて、
その右上らへんにある本当の値に変えてみて。

140:デフォルトの名無しさん
07/02/02 00:29:36
っていうか、
VBAの勉強中だからついVBAで答えてしまったけれども・・・。

セルB1をクリック(選択)
データ→フィルタ→オートフィルタ
B1に三角がでるのでクリック
0:00を選択

orz...

141:デフォルトの名無しさん
07/02/02 00:37:36
>>140
ありがとうございます。
オートフィルにすると、行が詰まってしまうので、
行間は白紙のまま置いておきたいのですよ。

>0:00 の部分をセルに表示されてる値ではなくて、
その右上らへんにある本当の値に変えてみて。
VBAでは出力されないのですが、もう少し教えてもらえますか。

142:デフォルトの名無しさん
07/02/02 00:39:30
ここで無限ループ使った回答したら、素人にはブラクラ並の攻撃かもしれない

と、ふと思った

143:デフォルトの名無しさん
07/02/02 00:47:28
こっちのほうが安全じゃない?
my_Row= Range("a65536").End(xlUp).Row
for i = 1 to my_row
処理
next i

144:デフォルトの名無しさん
07/02/02 00:48:48
そのままなら、こっちか。
my_Row= Range("a65536").End(xlUp).Row
Do While rng.Row <= my_row

145:デフォルトの名無しさん
07/02/02 00:52:51
>>141
Option Explicit
Option Base 1

Sub testTwo()
'変数定義
Dim row As Long
row = 1
'正午のデータだけ取得
Do While row < 65500
If row Mod 24 <> 1 Then
ActiveSheet.Range(Cells(row, 1), Cells(row, 2)).ClearContents
End If
row = row + 1
Loop
End Sub

正午以外を消して空白を残す。
24行ごとに値があること前提だけども…。

手抜きでスマソ、そろそろ寝ようかと…。

146:デフォルトの名無しさん
07/02/02 00:59:56
>141
追記。
一瞬止まるけども、処理が遅いだけなので。
>>143)方式で、
Do While row < 65500

Dim myRow as Long
myRow = Range("a65536").End(xlUp).Row
Do While row < myRow

にすると早くなりまする。

>>143
>>145
まったくその通りですな。
まだまだ良いやり方のテンプレみたいなのがぱっと浮かんでこないのよなぁ…。

>142
自分のテストでは無限ループしたいほうだいだけどね。


すみません放置します。
おやすみなさい。

147:デフォルトの名無しさん
07/02/02 01:03:55
どうもでした。ペコリ。

148:デフォルトの名無しさん
07/02/02 01:08:35
成功しました。重ねてペコリ。
これで寝れそうです。

149:125-126
07/02/02 07:20:11
>>129-130
レスどうもです。
出ているエラーの件は、たまにしかエラーが出ないので
エラーの内容を良く覚えてないのですが
「サポートされてない」みたいなエラーだったと思います。

do until構文を使う前にもsleepしてみて
エラーが出るかどうか、しばらく様子を見てみます。

150:デフォルトの名無しさん
07/02/03 01:28:07
ちょっと暇だったのでVisualBasicのヘルプ全部印刷してみた(両面)

ヘルプ最高だな
高い金出してリファレンス買うぐらいならヘルプ印刷しといたほうが幸せだと気付いた
つうか手元のリファレンス見たらヘルプ丸写しがあって萎えた

151:デフォルトの名無しさん
07/02/03 22:06:07
そうか〜?
現実問題、リファレンスで一番重要なのは索引なのだけども
オブジェクト名やメソッド名とかは印刷したものをアルファベット順に並べればいいとしても・・・
その他は・・・

152:デフォルトの名無しさん
07/02/03 23:11:21
すみません。Vista/Excel2007で
Application.Speech.Speak "日本語"
をやると、英語なら何の設定もせずに読み上げるんですが、
日本語は読み上げません。
2003では設定すれば「ツール」→「音声」→「[読み上げ]ツールバー」ででたツールバーも
表示させる方法もわからないのですが、
どなたか、お教えいだけないでしょうか。

153:デフォルトの名無しさん
07/02/04 00:19:46
新しいものにすぐ飛びつく早漏の癖に
情報的な基盤の無いものを自力で使いこなしていく
スキルも無い奴ってのは一番厄介だな

初心者ならシェアが広がるまで我慢汁垂らしながら待ってろよ

154:デフォルトの名無しさん
07/02/04 00:21:56
>>150
両面印刷コストが20円として、100ページで2000円になる。
1000ページなら2万だし買った方が安くないか?

155:デフォルトの名無しさん
07/02/04 01:22:42
コンピュータを用いた授業をしようと思うんですが、
VBAを用いて中学校数学の何か面白い教材を作ることできないかな??


156:デフォルトの名無しさん
07/02/04 01:31:07
>>155
あるセルに好きな数字を入れると別なセルに数字が自動的に表示されて
その計算方法を推理させるとか。
もちろん数字を変えていくことで推理可能な計算式を考えんといかんよ。
数字じゃなくて論理式でも面白い、ある言葉を入れると別な言葉に置き換えられるとか。
あなたのVBA習熟度がどのくらいか知らないけど。

157:デフォルトの名無しさん
07/02/04 01:31:45
>>155
「面白い教材」を考えるのは教員の仕事。
お前が思いつけないなら、お前はその程度の教師ってことだ。

考えついた「面白い教材」の実現方法なら手助けしないこともないが
何が悲しくて教員でもないのにガキの嗜好に頭捻らにゃならんのだ?

158:156
07/02/04 01:34:02
>>157
正直スマンかった・・・

159:デフォルトの名無しさん
07/02/04 01:46:55
いや、そういう返答は無視でw

160:156
07/02/04 01:55:35
いや、>>157は言い方はあれだけど正論
写真屋スレで「キャラ絵描くんだけどどんなキャラがいい?」って聞く奴はおかしいのと同じ



161:デフォルトの名無しさん
07/02/04 02:13:03
言ってしまえば
> 「面白い教材」の実現方法
だって教師の仕事なのに、それなら手助けしてやるって
言ってる時点で十二分に親切だな。

162:デフォルトの名無しさん
07/02/04 02:16:26
Excel2007ってVBAの基本的言語仕様は変わってないんでしょうか?

例えばVB6.0のIntegerが16Bitなのが
VS2005のVBだとIntegerが32Bitになってるみたいな

163:155
07/02/04 02:45:37
私は数学教師ですが、VBAは全くといっていいほどの初心者です。
データから平均を出したり、総合得点を出して表示させるぐらいしか
できません。
実現方法よりもどういったことができるかがよくわかっていないのです。
VBAにかなり詳しい方々が集まっているようなので、ご意見を参考に
させていただきたかったのですが、予習をしてから出直してきます。
すいませんでした。







164:デフォルトの名無しさん
07/02/04 03:08:23
>>163
藻前は本当に教師なのか?
数学の分からない厨房は数学をイメージできない
数値なんて表示させても糞の意味もない
パソコンで学習させるなら、イメージを表示させてやる方がいい
つまり、関数グラフとか図形を使いこなして表示させろってこった

165:デフォルトの名無しさん
07/02/04 03:12:32
>>164

166:デフォルトの名無しさん
07/02/04 04:52:17
>>163
エクセルVBAで色々できるよ。外部アプリケーション、例えばインターネットエクスプローラーの制御も出来るよ。
工夫すれば、それなりにエクセルVBAでゲームを作ることもできて
エクセルVBAで作られたゲームのサンプルプログラム集とかも発売されてるよ。

167:デフォルトの名無しさん
07/02/04 04:59:10
つうかさ、パソコン関係って何が出来るかって聞いていたら全然先に進めんぞ
自分は何がしたいって目的が最初であって、それを実現するにはVBAを選択するとか
他のモノを選択するとかすべき

168:デフォルトの名無しさん
07/02/04 11:04:19
パソコンクラブでも作ってマニアな中学生に教えてもらえ
学習曲線は残念だけど物好きな中学生には勝てん
先生側は「教育の技術」で中学生と勝負しろよ

ExcelVBAは開発環境と実行環境の距離が近くていい材料だと思うけどね

169:デフォルトの名無しさん
07/02/04 11:47:54
>>163
子供が見て分かりやすいのは物理シミュレーション
やはり目で見て動くと分かりやすい。
普通に教科書レベルの加速度とか落下だけでも結構面白い物が作れる

ExcelでもShapeやUserFromの座標を指定できるわけで

日本のApple本社に学校の旅行で行った時に、
なんてソフトか忘れたけどBasic風の記述言語で

「初期値を設定してボール(カエルだったかも)をジャンプさせて、落ちてきたて跳ねる」

ってプログラムが課題だった
ついでに速度や高さも表示する

設定値を間違えると果てまで飛んで行ったりして面白かったが。

数学なら幾何系とか確率系とかも分かりやすいかも

170:デフォルトの名無しさん
07/02/04 11:50:05
計算問題を自動で作って答えあわせをするコードとか
100マス計算とかできるんじゃない?
でもそういうなのはネットを探せばいくらでも出てくるような気がする。

171:デフォルトの名無しさん
07/02/04 12:30:10
>>170
数学を図式化して理解しやすくするのは良いが

それは駄目だろ、餓鬼に頃は紙に文字を書いて計算しないと馬鹿になるぞ

172:デフォルトの名無しさん
07/02/04 12:31:00
>>170

173:デフォルトの名無しさん
07/02/04 14:19:00
あるExcelファイルを日付が変わったら自動起動させるようにするには、
どんな感じで実現したらよいのでしょうか・・?

日の定型処理をしているのですが、
忘れてしまう事が多々あるので自動化したいです。

174:デフォルトの名無しさん
07/02/04 14:53:15
>>173
そんな曖昧な条件でどうしろと?
「あるExcelファイルを日付が変わったら自動起動」という条件だけなら
OnTimeで0:00にブックを開くプロシージャを呼ぶだけだが、実際にはOnTimeが使える
状況では無いだろうし、ブックを開くのも「日付が変わったら=0:00」では困るのでは?

条件はエスパー以外の第三者にも伝わるように、日本語できちんと書こう。

175:デフォルトの名無しさん
07/02/04 15:00:57
多分タスクでOK。つまり、VBA云々ではなくWindowsの使い方の問題。

176:デフォルトの名無しさん
07/02/04 16:00:52
excel4.0専用のスレが見当たらないのでここで失礼します。
excel4.0のマクロって最近のexcelでも当時と同じように記述できるの?
なくなったマクロ関数や文法の変更なんかはないのかな?

たとえば『=select(シート名!R[1]C[1])』と記述して実行すると、
目的のシートのアクティブセルではなくマクロシートのselect関数が
記述してあるセルから1行下で1列右のセルを選択してしまう。
これはexcel側の仕様変更によるものじゃないよね?
もし記述の間違いによるものだったら正しい書き方を教えて。

177:173
07/02/04 19:26:01
>>174
すいません。今週末から勉強を始めたので理解が足りないかもしれません。
Webクエリを用いてあるHPの表データを取得し統計処理をしています。
統計処理はそのExcelファイルを起動すれば実行できるよう実装済。

そのHPの表データは00:10頃に日々更新されているので毎日実行したいです。
そこでこの時間がきたら自動的にExcelファイルを起動する方法は、
どうやるのかなと質問してみました。
よくウイルス等で特定の時間が来たら挙動するようなものもあるし、
出来ない事はないなだろうと。

実行条件は時間以外にも色々ありますがFlagや分岐をつけたりすれば、
何とかできるだろうという事で今回は質問しませんでした。

Googleで「VBA 自動起動」等と検索しても条件が悪いらしく、
上手く引っかからないのでキーワードだけでももらえればと思いました。
これ以上は上手く説明できません。ごめんなさい。

>>175
あっありがとうございます。
VBAではなくそんな方法だったんですね。
書き込み後の検索中にAccessで似たような質問にヒットした時、
APIでスケジュラーに・・なんて記述があったので、
関係あるのかと思っちゃいました。

178:デフォルトの名無しさん
07/02/04 21:35:03
>>177
スタートボタンから、ヘルプとサポートをクリック、テキストボックスに at っていれてみ。
出てくるから
スレ違いな話になってしまうんでこれでやめるけど。

179:デフォルトの名無しさん
07/02/04 22:14:27
誰か教えてください。
仕事で ある一定の条件を満たすレコードを足していくプログラムをかいたのですが、数字がおかしくなります。
例えば、足す数字が15.1 80.6 30.4となると出た数字が126.100015239みたいな数字になります。
これはなんでなんでしょうか?

180:デフォルトの名無しさん
07/02/04 22:43:27
小数点の演算というのは、CPUの仕組み上誤差が出るものなのだ。

仕組みや理由についてはは、「浮動小数点 誤差」とかでググるとそれっぽい解説のされてるとこがでるのでそこで確認してください。


Excelのシート上で、その見た目をどうにかしたければ、セル書式の設定で小数桁数1桁だかなんだかにすればよいです。

181:デフォルトの名無しさん
07/02/04 23:35:39
浮動小数点演算をIF文なんかで条件処理する場合
=つかっちゃ駄目なんだよなぁ

182:デフォルトの名無しさん
07/02/05 01:29:53
基本的に割り算もだめですね


183:デフォルトの名無しさん
07/02/05 08:09:20
整数値の割り算の場合は/でなく
¥(商) Mod(余り)を使えばなんとかなる

184:デフォルトの名無しさん
07/02/05 10:48:46
いま正規表現の検索フォームを作ってます
検索対象をusedrangeで取得してfor eachでまわしてます。
これで動作は問題ないのですが、対象が多いと時間がかかってしまいます。

そこで、rng=usedrangeと配列に代入して高速化しようとして問題にぶちあたりました。

配列に代入されるのがValueっぽいので、
セルに10:00の様に時間や日付が入っている場合
longになるので検索文字が10などと一致しません。

usedrang.textとして代入すると空になってしまいます。
配列に代入された文字の表示形式を調べて変換することも考えたのですが、
現状と大差ない感じがします。

シート上に表示されている値をまとめて配列に代入する方法か代替案がありましたら
ご教授おねがいします。


185:デフォルトの名無しさん
07/02/05 10:53:50
クエリー

186:デフォルトの名無しさん
07/02/05 11:05:11
txt→CSV変換でなにか、いいサンプルコードないですか?

入力ファイル:oder.txt
出力ファイル:任意.csv
csvに出力する時、元のtxtから不要データの排除と任意条件での集計

VBAかVBSで出来そうと思いいろいろ本読んで見たけど
いかんせんCobolerなので、よくわかっとりません

187:デフォルトの名無しさん
07/02/05 11:09:25
元のテキストファイルのフォーマットはどのようなものですか?
固定長?

188:デフォルトの名無しさん
07/02/05 11:36:51
Public Sub TextToCSV(ByVal pInPath As String, ByVal pOutPath As String)
Const C_DELIM As String = "," '区切り文字
Dim s As String:Dim s2 As String:Dim ss() As String
Dim fnoIn As Long: Dim fnoOut As Long

'ファイル開く
fnoIn = FreeFile: Open pInPath For Input As #fnoIn
fnoOut = FreeFile: Open pOutPath For Output As #fnoOut

'ファイル終了まで繰り返し
Do While (EOF(fnoIn))
'1行読み出し
Line Input #fnoIn, s
'特定のバイト位置に区切り文字を入れた文字列を作成する。
'イメージ000001111122222⇒00000,11111,22222
s2 = Mid(s, 1, 5) & "," & Mid(s, 6, 5) & "," & Mid(s, 11, 5)
'区切り文字が入った文字列をSplitで配列に出力
ss = Split(s2)
'各要素のチェックをする
If ss(0) = "99999" Then GoTo LOOP_NEXT
'ここまで来たら大丈夫のようなのでカンマ入り文字列(s2)CSVに出力する
Print #fnoOut, s2
LOOP_NEXT:
Loop
Close #fnoIn: Close #fnoOut
End Sub


189:デフォルトの名無しさん
07/02/05 11:37:36
あータブとか消されてしまうのか。見づらいな。

190:186
07/02/05 15:09:56
>>187
固定で102byteです。
得意先がいい加減で、仕様も手探り状態なもので(泣

>>188
ありがとうございます。
このコードを参考にして、試行錯誤してみます。



191:デフォルトの名無しさん
07/02/05 17:01:11
>>190
得意先に仕様書無いと作れないと言えばいいじゃん。

192:186
07/02/05 18:04:31
>>191
言ったよ゚・(つД`)・゚・
普段もらっている受注データとは別のもので。。。
特殊なパターンで、これしか渡せないと言われた。
txtデータと口頭で言われた項目(どこまでが**で**byteで、とか)だけ。
結局、自分たちで解析するしかなくて。。。
ホストのマスターに落とす必要ないのでVBSかAccessの類で出来ないか
考えてたんです。

ちなみに得意先はホ●ダ技研鈴鹿工場です
バイクも車もホ●ダだが、こういう体質は好かん!

193:デフォルトの名無しさん
07/02/05 18:10:10
大丈夫、他も似たようなもんだ。

194:デフォルトの名無しさん
07/02/05 20:11:48
>>180>>181>>182>>183
激しく感謝です。やっぱだめなんですね・・・^^;

195:デフォルトの名無しさん
07/02/05 21:04:29
>>194
つか<、>で範囲チェックすりゃいいじゃん

196:デフォルトの名無しさん
07/02/05 21:09:03
>>195
それはやっちゃダメ
結果的に同じでもコード的に意味が違ってしまう
つまり可読性を損なう

197:デフォルトの名無しさん
07/02/05 21:18:55
>>196
どうしても出来ないときは
いいじゃんコメント書いとけばいいんだから

全部そんなプログラム組んじゃいけないけど


198:デフォルトの名無しさん
07/02/05 21:20:09
後は10とか100でかけて整数値にするかだな

199:184
07/02/05 21:59:21
>>185
俺にたいするレスと受け取っていいんですよね?

色々検索して
URLリンク(www.microsoft.com)
を参考にしてテストしてみたんですが、
やっぱり時間とかはきちんと取得できないんですけど、
(セルに10:00といれておくと0.5になる)
これじゃないんでしょうか?

申し訳ないんですが、検索キーワードなど教えていただけると
助かります。

いや、助けてください

200:デフォルトの名無しさん
07/02/05 22:41:49
Dim tm As Date
Dim buf As String
tm = Cells(0, 0)
buf = Format(tm, hh:mm")

これで普通の文字列になるがな


201:デフォルトの名無しさん
07/02/05 22:42:29
buf = Format(tm," hh:mm")


202:デフォルトの名無しさん
07/02/05 22:45:10
更にtmだけでも応用すりゃ検索もできる

203:デフォルトの名無しさん
07/02/05 23:08:56
>>200-202
おまえ、バカだろ。文字列にする方法なんてこの際問題じゃない。そんなの簡単に解る。
君のやり方で文字列化するなら、その前にその値が元々どういう表示形式で表示されていたか判断しなきゃならないんだよ。

そして>>184
> 配列に代入された文字の表示形式を調べて変換することも考えたのですが、
とあるから、君の考えた方法は既に変わりきってる上で、表示形式をいちいち調べて文字列に変換してたら
ValueではなくTextプロパティをループで読むのと大差ないってこった。

204:デフォルトの名無しさん
07/02/05 23:14:58
>>203
いや
>>10:00といれておくと0.5
と言う単なるヒントだ、そのまま使ったら馬鹿だが

205:デフォルトの名無しさん
07/02/06 00:15:27
10:00といれておくと0.5になるなら
逆に検索値を時間の場合10:00なら0.5にすりゃいんじゃねぇ?

206:デフォルトの名無しさん
07/02/06 00:35:33
それだと時間じゃない0.5もヒットするわけで

207:デフォルトの名無しさん
07/02/06 01:07:40
データベース使っても結局Value値がセットされると・・・
0.5でヒットしたらセル見にいって属性しらべたら?
少しはマシかも、0.5とかいっぱいあったら終わりだけど

208:デフォルトの名無しさん
07/02/06 01:23:47
Findじゃ遅いの?

209:デフォルトの名無しさん
07/02/06 01:27:24
findじゃだめなんだよ

210:デフォルトの名無しさん
07/02/06 01:32:58
あとはクエリ使って、ここで答えでないんなら
データベース関係のスレで聞いてみたら?

211:184
07/02/06 01:35:12
色々なレスありがとうございます。
最初の書き込みが携帯からで、内容をはしょりすぎて誤解があるようなので再度書き込みます。

A列)日付 B列)曜日 C列)作業名 D列)開始時刻 E列)終了時刻 F列)処理時間 G列)備考
が入っている複数のシートから正規表現で検索をしたいと思っています。

今の簡単なコードを書くと

Set reg = CreateObject("VBScript.RegExp")
With reg
.Pattern = strPattern
.IgnoreCase = True
.Global = True
end with
For Each sh in Thisworkbook.Sheets
For Each rng in sh.UsedRange
If reg.test(rng.Text) Then
検索文字列が見つかったときの処理
Debug.? "[address]" & rng.Address & " [text]" & rng.Text & " [Formula]" & rng.Formula
End If
Next
Next

といった流れなのですが、検索対象が大量にあり処理に時間がかかってしまいます。(対象30万件で5分くらい)
そこでFor Each rng in sh.UsedRangeをやめて、rng = sh.UsedRangeのように
配列にして、検索しようとしたところ、日付や時間(表示形式は[h]:mm)がLong型になるため
srtPattern = "10" などに10:00などが該当しなくなります。
rng = sh.UsedRange.Formulaは代入がうまくいくのですが、rng = sh.UsedRange.Textはできないようです。

列ごとに時間や日付が入っているなら、そこだけ変換すりゃいーだろ、と言われそうですが
列がずれた場合や新たに項目が増えた場合を考えて、決め打ちで変換するのは出来れば避けたいと考えています。
説明下手ですいませんが、高速に処理する方法がありましたらご教授お願いします。

212:デフォルトの名無しさん
07/02/06 01:39:00
件数多いなぁ、確実にデータベース使った方が良いと思うよ
漏れはやり方わからんが

213:デフォルトの名無しさん
07/02/06 01:42:57
>>列がずれた場合や新たに項目が増えた場合を考えて
列のセルに名前付けりゃいいんじゃないの?

214:デフォルトの名無しさん
07/02/06 01:56:50
> 列がずれた場合や新たに項目が増えた場合を考えて、
2行目(実データの1行目)の表示形式に合わせるって手もある
30万回表示形式取得したら相当遅くなるだろうが、列数分(現状7回)だけなら殆ど気にならないだろ

215:たのんます
07/02/06 02:00:54
エクセルに関する質問なんですが
統計数字データをグラフに変換して、統計データによるグラフを作成する際に
統計データの始点と終点を同じにして、重ねて比べられるようなグラフにしたいのですが
統計データの量が、比較したいAとBでは異なるため、
始点終点を同じにして、重ねて比べることができません。
何か関数とかその他の方法で、
違うデータ量のものを重ねて比較する方法はないでしょうか?

216:184
07/02/06 02:08:44
書き忘れましたが、正規表現を使いたい理由は作業名が入力者により、まちまちなのでまとめて検索したいからです。
誤)日付はDate型ですね。すいません。
  0.5は12:00でした。すいません。

いま>>199のリンク先のコードを改良してテストしてみたら、
10:00とかはちゃんと取れますね(表示10:00→取得値10:00:00でした)
ただ24時間を越えるとダメみたいです(表示28:00→取得値1900/01/01 4:00:00でした)
日付も表示が1月1日でも2007/01/01でした。
何か指定する方法があるのかもしれませんが…

>>208
Findって正規表現使えましたっけ?調べてみます

>>210
なにぶんADOとか初めてなんでもう少し
URLリンク(support.microsoft.com)
とかを見て勉強してみます。

>>212
俺もそう思います

>>213
名前を定義なども考えましたが、名前=範囲な訳で新規に項目が増えた場合にはコードを追加し
範囲別にコードを書かなければいけないので、試してません。
条件分岐で範囲(名前)別にコードを書く必要もないかもしれませんが、
ただでさえ件数が多く時間がかかるので、極力条件分岐などの処理をいれたくないので。

>>214
それは考えつきませんでした。試して見たいと思います。

色々ありがとうございました。自分でも試行錯誤してみようと思います。

217:デフォルトの名無しさん
07/02/06 02:16:11
>>216

Date型 は日付と時間一緒ですよ(小数点以下が時間)

>名前を定義
範囲で名前付けるんじゃなく、1行目の1セルに名前付けて
呼び出せば行位置と列位置が分かる 列位置分かればなんの行か分かるでしょ


218:デフォルトの名無しさん
07/02/06 02:19:39
>>217

>名前を定義
と書いていて複数シートじゃ駄目だね・・・

219:デフォルトの名無しさん
07/02/06 02:20:11
>>215
あるけどマルチしたので教えません

220:たのんます
07/02/06 02:49:33
すいません マルチの意味がわかりました、、、
してはいけないことと知りませんでした。
ただものすごく困っています。
色々調べても方法がなくて、、、
ご存知でしたら、何卒お教えいただけませんでしょうか?
以後こんな事をしてしまわないように気をつけます。

221:デフォルトの名無しさん
07/02/06 02:59:27
今回のが教訓だ。ここで教えちゃったら教訓にならない。
「マルチしても謝れば教えてもらえる」程度に思っちゃうだろう。

今回マルチをしてしまった責は、今回答えてもらえないということで負い
以後気を付けることで、以後の質問では突き放されることはなくなる。

まぁマルチをしても、2chで仮初めの礼を言われることくらいしか楽しみのない
哀れな教えたがり君が答えてくれることもあるけどね。

222:デフォルトの名無しさん
07/02/06 13:58:34
VBAでTerminateメソッドって使えないんでしょうか?
VBAから起動しているアプリを終了したいんですが

Set WshShell = CreateObject("WScript.Shell")
WshShell.Terminate ("ファイルパス")
と打ち込んでもエラーになっていまいます。

Set WshShell = CreateObject("WScript.Shell")
WshShell.exec ("ファイルパス")
で起動はできるようですが。

VBAを使って、windows上で起動しているアプリを終了させるには
どうしたらいいんでしょうか?

223:デフォルトの名無しさん
07/02/06 14:25:54
>>222
Win32API使うかWMI使うかだな
つーか全然VBAの質問じゃないし

224:222
07/02/06 14:34:30
え、これVBAの質問じゃないんですか?
すいません。
これはAPIのスレに行けばいいんですかね?

225:デフォルトの名無しさん
07/02/06 15:09:04
VB言語でApplicationオブジェクト(ExcelやWord)を操作するからVisual Basic for Application、略してVBA。
Applicationオブジェクト(Excelではブック、シート、セルなどを含む)を操作しなかったら
例えExcelやWord付属のVBEで実行しようと、VBAの分野の話じゃ無い。

開発環境の方のVisual Basicでやるべき事を、ExcelやWord付属のVBEに持ってきてるだけだ。
VBAはあくまでもマクロ言語なのに、開発環境に匹敵するほど強力過ぎる故にその辺の区別が出来ない奴が多くて困る。
「VBAで」の部分を「VB6.0で」に置換しても通用しちゃうような話は、全部開発環境分野の話だと思ってくれ。

因みに君のレベルならWin32APIよりはWMIの方がいいと思うぞ。
でもどっちにしろスレで質問することばかり考えてないで自分で調べることを考えよう。
どうせWin32APIスレでは言語限定での丸投げ(コード書いてクレクレ)なんて聞いちゃくれないし。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5375日前に更新/123 KB
担当:undef