●EXCEL・VBA質問スレ ..
[2ch|▼Menu]
116:デフォルトの名無しさん
07/06/12 02:40:26
>>115
Set newBk = Workbooks.Add

Workbooks(ブック1名称).Worksheets(シート名).Range("A1:A20").Copy _
newBk.Worksheets(シート名).Range("A1")

こういうことか?


117:デフォルトの名無しさん
07/06/12 17:02:19
Excel2007です

新規ブックでシート上にシェイプを作成し、そのシェイプにマクロを登録します。
シェイプに登録したマクロはこれです。
sub a
thisworkbook.close
end sub

このシェイプをクリックするとエクセルが終了してしまいます。
「問題が発生したため・・・・」

この問題を回避する方法はありますか?


118:項目によるセルの参照ないし選択?
07/06/12 19:21:52
Excel2000のユーザーでVBAの入門者です。

[表]
列に最高気温、最低気温、平均気温という三つの項目を入れ 行に日付の項目を入れた表を
つくりました。下記はその具体例です。
A2 = "2007年1月1日", A3 ="2007年1月2日", A4 = "2007年1月3日",....(以後果てしなく続く)
B1 = "最高気温", C1 = "最低気温", D1 = "平均気温"

[VBAでやりたいこと]
例えば、2007年1月1日の最高気温の値をVBAで入力する場合に、A列の行から"2007年1月1日"
という値の入っているセル番号を探し、"最高気温"の項目と交わるセルをセレクトしたい。
セル番号で直接参照して選択させる方法だと汎用性がないので、項目によって参照させたいんです。

119:デフォルトの名無しさん
07/06/12 19:54:23
>>117
そのマクロを実行しない

120:デフォルトの名無しさん
07/06/12 20:05:58
>>118
A2を選択して
データ->フィルタ->オートフィルタ

121:項目によるセルの参照ないし選択?
07/06/12 22:32:41
>>120
助言して下さって、どうも有難う御座います。私の説明が間違っていたんでしょうか、
オートフィルタは私のやりたいこととはかなり違う気がします。
アクティブではなく「セレクト」という表現を使ったのがまずかったかもしれません。
正確な用語法が分からなくてすみません。

122:デフォルトの名無しさん
07/06/12 22:59:16
>>121
セル番号で直接参照して選択させる方法って何?

項目で参照させたいならセルに名前をつければ?

123:デフォルトの名無しさん
07/06/13 00:43:57
>>118
Find メソッドを使う
ワークシート関数のINDEX 、VLOOKUPを使う

124:デフォルトの名無しさん
07/06/13 09:07:26
どなたかご存じでしたら教えてください。

VBAからJAVAのクラスを使用するための手順を
ご存じでしたら教えてください。
(JAVAのアプリを実行する手順ではないっす)
JNIを使ってJAVAを呼び出すのでしょうか?

当方、VBAもJAVAも初心者なもんで、一連の流れを書いてくれると
ありがたいです。

スレチだったらスンマセン

125:デフォルトの名無しさん
07/06/13 09:22:55
>>124
スレ違いなのでさようなら
参考までに>>101の後半読んでおいてね

126:ここでナット
07/06/13 09:49:13
ちょっとアホな質問かもしれないですが、

VBAのフォームのソースだけを変更して、

それ以外の標準モジュールやシートの内容は

そのままにする事をプログラム化する方法は

ありますでしょうか?

※ボタンを押すだけでソースだけ更新みたいな事です。



127:デフォルトの名無しさん
07/06/13 09:59:13
VBAでグラフを描きたいのですが、第2軸の目盛の最大、最小の指定は
どうすれば良いのでしょうか。
(下記は主軸の場合ですが、どのように変えれば良いのでしょうか)

With .Axes(xlValue)
.MinimumScale = 0
.MaximumScale = 1
End With

よろしくおねがいします。

128:デフォルトの名無しさん
07/06/13 10:17:52
>>127
操作をマクロに記録して睨めっこ。

129:デフォルトの名無しさん
07/06/13 10:37:42
どこで聞いて良いかわからなかったんだが、
膨大な量の乗車案内を検索かけたいんだが、何か良い方法はないだろうか?
東京→上野
東京→新宿
東京→池袋
東京→・・・
   ・
   ・
   ・

130:117
07/06/13 10:40:04
>>119
ありがとうございます。
現在はその回避方法を採用するつもりです。

ただ、その現象が当方の環境によるものかが判断できません。
みなさんの所でも同じ現象が起こりますでしょうか?

また、他の回避方法もありましたらお教えください。

131:デフォルトの名無しさん
07/06/13 11:44:24
>>126
具体的には?

132:ここでナット
07/06/13 11:59:54
>>131

ソースに不具合があったので、ソースだけ更新を行いたいです。

エディター画面を開いてソースを書き換える作業すれば良い事なのですが

その作業を行える人がいないので、簡単にソースだけを書き換える方法を探してます。

例えば、別のExcelマクロを用意してその中に新しいソースを入れて、

ボタンを押して実行すると、変更先のExcelマクロのソースだけが更新するみたいな

事がやれたらいいなと思っています。



133:デフォルトの名無しさん
07/06/13 18:15:41
>>130
当該ブックのみ終了。再現しません


134:デフォルトの名無しさん
07/06/13 18:26:31

>>132
 . . .
具体的には?

URLリンク(dictionary.goo.ne.jp)


135:デフォルトの名無しさん
07/06/13 19:08:08
>>132
エクスポートインポート

136:デフォルトの名無しさん
07/06/14 01:29:13
教えてください。
ボタンを押すと、C→File→にあるdata.csvを開いて処理開始なんですが、
データが無い場合にエラーメッセージを表示するよう仕組んでと言われまして。

ChDir "C:\File\data.Csv"
Workbooks.Open Filename:= _
"C:\File\data.Csv"

とこのあと、if then 文を書けばいいと思うのですが、
If Dir("C:\File\data.Csv") = "" Then
MsgBox "DataBook.xlsは見つかりません"
End If
Exit Sub
こんなん書いたんですが、勿論動きません。
IF文以下お教え願います。


137:デフォルトの名無しさん
07/06/14 01:31:43
すみません、表記間違ってました。

MsgBox "DataBook.xlsは見つかりません"

  ↓

MsgBox "data.csvは見つかりません"  の間違いです


138:デフォルトの名無しさん
07/06/14 01:35:16
あとじゃなくて先にしろ

139:デフォルトの名無しさん
07/06/14 06:08:04
If Dir("C:\File\data.Csv") = "" Then
 MsgBox "data.csvは見つかりません"
 Exit Sub
End If
 ファイルオープン処理

動かなければどこのコードで動かないのか確認してから考えた方が…。


140:127
07/06/14 10:54:26
>128

レスありがとうございます。それしかないですか^^;



141:デフォルトの名無しさん
07/06/14 11:08:33
EXCEL2007のVBAで、複合グラフ(折れ線)を描いたのですが、
グラフの描画領域が、指定したセル範囲をオーバーして描かれます。
指定したセル範囲に収まるようにするには、どうすれば良いのでしょうか

列(縦)方向はぴったり合うのですが、
行(横)方向に幅がオーバーします(左端も少しセルの左端からズレます)。

<コード>
Dim dataRg As Range, graphRg As Range
Sheets("DATA1").Select
Set dataRg = Sheets("DATA1").Range(Cells(data_row_from, data_col_from), Cells(data_row_to, data_col_to))
Set graphRg = ActiveSheet.Range(Cells(graph_row_from, graph_col_from), Cells(graph_row_to, graph_col_to))
Sheets("CHART").Select

With ActiveSheet.ChartObjects.Add(graphRg.Left, graphRg.Top, graphRg.Width, graphRg.Height).Chart
.SetSourceData Source:=dataRg, PlotBy:=xlColumns
.ChartType = xlLine
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
.HasLegend = False

.SeriesCollection(1).Border.ColorIndex = 41
.SeriesCollection(2).Border.ColorIndex = 53
.SeriesCollection(2).AxisGroup = xlSecondary
End With


142:デフォルトの名無しさん
07/06/14 13:39:11
>>140
With ActiveChart.Axes(xlValue, xlSecondary)
.MinimumScale = 0
.MaximumScale = 1
End With

143:117
07/06/14 13:52:30
>>133
そちらの環境では再現しませんでしたか。
情報ありがとうございます。

もう一台、2007をインストールしたPCを用意したのですが、
そちらでも100%再現しました。

マクロを直接実行した場合は問題なく当該ブックのみ終了するのですが、
そのマクロをシェイプに登録し、そのシェイプをクリックすると
ブックが閉じたあとにExcelが異常終了してしまいます。

ブックを変更していた場合、保存を確認するダイアログがでますが、
「キャンセル」を選択した場合は問題なく、「はい」「いいえ」を
選択した場合は異常終了となります。

ただ、他のブックを開いている場合は当該ブックのみ終了し、
Excelの異常終了はありません。

前回質問時はUpdateしてませんでしたが、Updateした環境でも
同様でした。

とりあえず、他の掲示板などでも同じ質問をしてみてから
マイクロソフトに問い合わせをしてみようと思います。

ありがとうございました。

144:デフォルトの名無しさん
07/06/14 15:20:06
>>132
VBE.CodeModuleのInsertLines(), DeleteLines(), ReplaceLine()あたり。
VBEを使うには、なにか制限なり手順なりがあったような気もする。
実行も、セキュリティレベルを下げる必要があるかも。

まぁ、そのような状況にならないように、アプリはアドインで作った方がいい。

145:デフォルトの名無しさん
07/06/14 15:33:12
>>143
他の環境でも再現するんだ
何か共通でインストールしてるものに影響されてるのかな?

146:144
07/06/14 15:37:08
URLリンク(sourceforge.jp)から、vbaunitというのをダウンロードして、
新規Bookを開き、参照設定でVBAHelper.xlaと「Microsoft Visual Basic for Applications
Extensibility 5.3」を参照する。
新規にモジュールを作成し(Module1)、次のコードを貼り付け実行すると、3行目が修正される。
Option Explicit

Sub foo()
Dim cm As CodeModule
Set cm = VBAHelperModule.VBAHelperLookupCodeModule("Module1")
cm.ReplaceLine 3, "Sub bar()"
End Sub


147:117
07/06/14 18:15:07
>>145
こちらのテスト環境ですが、どちらも XP Pro SP2 で Office 2007 Enterprise です。
ただ、一方は Virtual PC 上の XP に Excel2007 のみをインストールした状態です。

今のところ考えられる条件は
・シェイプにマクロを割り付けてクリックで実行
・現在のブックのウインドウが閉じられる
・他のブックのウインドウが開いていない

thisworkbook.close 以外にも、これらのコードでもだめでした。
 workbooks(1).close
 window(1).visible = false

148:デフォルトの名無しさん
07/06/14 19:01:36
>>147
なるほど、おそらく2007固有の現象ということですな
2007持ってないんで他の持ってる人に試してもらいたいね

149:140
07/06/15 09:13:16
>>142
レスありがとうございます

150:デフォルトの名無しさん
07/06/15 16:13:53
Rangeの最初の位置を(左上)得たいのですが、どうするのが簡単なんでしょ。

ActiveSheet.Range("テーブル[列]").Offset(0, 0)

Offsetでよいのかな?うまくいっているみたいですけど

151:デフォルトの名無しさん
07/06/15 16:19:45
ActiveSheet.Range("テーブル[列]")(1)

など



152:150
07/06/15 16:26:32
Excel2007です。
>>151
サンクスです。

でじつは、Rangeオブジェクトを for で回そうと、

Dim StartCell As Range, LastCell As Range
Set StartCell = ActiveSheet.Range("テーブル[列]").Offset(0, 0)
Set LastCell = ActiveSheet.Range("テーブル[列]").End(xlDown)

' 資産に関連するもの更新
For i = StartCell.Row To LastCell.Row
   CalculateTable (ActiveSheet.Cells(i, 4))
Next i

としていたのですが、もっと簡単な書き方はないでしょうか?

Dim Cell As Range
For Each Cell In ActiveSheet.Range("テーブル[列]")
   CalculateTable (Cell)
Next
とすると、 CalculateTable (Cell) で、オブジェクトが必要です、と怒られてしまいます。 orz


153:150
07/06/15 16:30:12
>>152
うああああ、
   CalculateTable (Cell)
じゃなくて、
   CalculateTable Cell
にしたら、エラーでなくなった orz
マジVBAわかんねえええええ。

なんだこら

154:デフォルトの名無しさん
07/06/15 16:37:34
関数単体で引数()でくくるとなりますね

155:デフォルトの名無しさん
07/06/15 21:01:14
たぶん配列とまぎらわしいからだろ

156:初心者
07/06/17 13:50:18
はじめまして、VBAをやり始めたばっかりで全然わからないので教えて下さい。

(1)1+2+3+…+10を計算する
(2)1+3+5+…+19を計算する
(3)1+4+9+…+100を計算する
と言う問題で以下の空欄にあてはめるものを答える問題です。

Sub ex()
Dim x As Integer, sum As Integer
sum = 0
For x = 1 To 10
(空欄)
  Next x
Msgbox "合計=" & sum
End Sub

長々とすみません。よろしくお願いします。

157:デフォルトの名無しさん
07/06/17 13:58:01
>>156
宿題だとばれると教えてもらえないから、もう少し、利き方変えた方がいいぞ

あと「よろしくお願いします」って、お前他力本願スギ。
どこが、わからなくて、どこで詰まっているかを質問しよう。

158:デフォルトの名無しさん
07/06/17 14:01:01
(1) sum = sum + x
(2) sum = sum + (2*x -1)
(3) は自分で考えろ馬鹿

159:初心者
07/06/17 15:52:53
すいません。(3)がわかりません

160:デフォルトの名無しさん
07/06/17 16:36:26
sum = sum + (5*x -1)

161:初心者
07/06/17 17:02:14
なぜそうなるのでしょうか?

162:デフォルトの名無しさん
07/06/17 17:12:23
>>160
ワロタ

163:デフォルトの名無しさん
07/06/17 17:48:13
>>161
悪いことは言わん。
算数からやり直せ。

164:デフォルトの名無しさん
07/06/17 18:14:15
なんでまたVBAのスレに質問してくるの?
VBAどころか、ただのアルゴリズム…いや、算数か。の問題だろ。

法則を考えろよ…。

165:デフォルトの名無しさん
07/06/17 18:27:48
言っておくけど160のは違うぞ。

ヒント。
sum=1+4+9+16+25+36+49+64+81+100
これで分からなければ終わってる。

166:デフォルトの名無しさん
07/06/17 18:41:58
気がつかなかった俺オワタw

167:デフォルトの名無しさん
07/06/17 18:46:23
わからない。答え教えてもらえないですか?

168:デフォルトの名無しさん
07/06/17 18:56:47
(3)は
sum=sum+(x*x)


169:デフォルトの名無しさん
07/06/17 18:57:32
>>156
(2)
For i = 1 To 19 Step 2: sum = sum + i: Next: Exit For

(3)
Select Case x
Case 1: sum = sum + 1
Case 2: sum = sum + 4
Case 3: sum = sum + 9
Case 4: sum = sum + 16
Case 5: sum = sum + 25
Case 6: sum = sum + 36
Case 7: sum = sum + 49
Case 8: sum = sum + 64
Case 9: sum = sum + 81
Case 10: sum = sum + 100
End Select

これでいーだろ







まじめに(3)のヒントだすなら「^2」


170:デフォルトの名無しさん
07/06/17 19:06:07
コーディングより1+4+9+…+100が全くわからなかった。
オワテルwww

171:デフォルトの名無しさん
07/06/17 19:30:52
をいをい…。

つうか>>156、その問題は学校の問題か?職場の問題か?

172:デフォルトの名無しさん
07/06/17 20:30:10
>>169
ヒント:「For x = 1 To 10」部分は固定

173:169
07/06/17 21:01:49
>>172
ん?
(2)のことならxでループさせてないんだけど?
試してないからわからんけど、ネストされたForで答えでない?

意味取り違えてたら堪忍

174:初心者
07/06/17 21:49:26
2乗はどうあらわしたらいいのですか?

175:デフォルトの名無しさん
07/06/17 21:55:05
>>174
>>169

176:デフォルトの名無しさん
07/06/17 23:10:44
>>173
Sub ex()
Dim x As Integer, sum As Integer
sum = 0
For x = 1 To 10
(空欄)
  Next x
Msgbox "合計=" & sum
End Sub

の中で変えて良いのは(空欄)の部分だけ
単に(1)(2)(3)の計算ルーチンを作れば良いだけではなく
1 To 10のxのループを使った上で解かなければならないという条件

177:デフォルトの名無しさん
07/06/18 00:10:28
偉そうに答えてる人の方がネタに見える…
(1) sum = x + sum
(2) sum = x * 2 - 1 + sum
(3) sum = x ^ 2 + sum


178:デフォルトの名無しさん
07/06/18 00:55:34
>>177

ありがとうございました!独学なんで分からないところがたくさんですm(__)m

179:デフォルトの名無しさん
07/06/18 01:03:28
>>178
Excelより先に算数の勉強をし直した方が良いぞ。

180:169
07/06/18 01:14:50
>>176
あ〜ごめん
xを必ずループさせろとは書いてなかったから

ちなみに
俺が書いた(2)が空欄に入れるものだってわかってるよね?
sum = 0
For x = 1 To 10
For i = 1 To 19 Step 2: sum = sum + i: Next: Exit For
Next x
Msgbox "合計=" & sum
End Sub
ってことね

答えが先にかかれてたからふざけてみたんだけど
ふざけすぎたかw
普通なら当然>>177だわなw


181:デフォルトの名無しさん
07/06/18 04:00:12
ネタなのはわかるがiはどこから出てきたんだw

182:デフォルトの名無しさん
07/06/18 16:22:16
EXCEL2003です。
半角アルファベット文字列の先頭だけ大文字にしたいのですが、
適切なものが見つかりません。

ググってProperを見つけましたが、これは先頭を大文字にするだけでなく
先頭以外の大文字を小文字にしてしまいますよね。

helloWorld → HelloWorldとしたいのですが、適切な方法を
教えていただけますか?

183:デフォルトの名無しさん
07/06/18 16:54:13
最初の一文字を取り出して大文字にすれば?

184:デフォルトの名無しさん
07/06/18 17:31:56
s = "helloWorld"
Mid$(s, 1, 1) = UCase$(Mid$(s, 1, 1))


185:デフォルトの名無しさん
07/06/18 21:59:57
Midステートメント使う人久しぶりに見た気がする
Midステートメント自体は自分で使いまくってるからよく見てるが
公開されたソース見ても、こういうところの回答見ても
使ってる人殆ど居ないからなぁ

ところで、Leftステートメントは無いから代入左辺はMidでいいが
右辺の関数はMidではなくLeftの方がいいのでは?
つ Mid$(s, 1, 1) = UCase$(Left$(s, 1))

まあ実はMidもLeftも無くてもOKなんだけどね
Midステートメント側で置換文字数指定していれば、何文字代入しようと指定文字数以外は置換されない
つ Mid$(s, 1, 1) = UCase$(s)

逆に代入する文字数を指定しておけば、置換する文字数は指定しなくても問題なかったりする
つ Mid$(s, 1) = UCase$(Left$(s, 1))

186:デフォルトの名無しさん
07/06/18 22:32:41
>>185
横レスだが、勉強になった

187:デフォルトの名無しさん
07/06/18 22:41:49
つかMidって参照だけかと思ってたw

188:デフォルトの名無しさん
07/06/18 23:11:52
MSbasicからの伝統で、mid$は関数版とステートメント版がある。

189:デフォルトの名無しさん
07/06/19 12:08:51
エクセルソフトを持ってないので、フリーソフトのOPENOFFICEを使用
ダウンロードしてVBAは作成できるんでしょうか?

190:デフォルトの名無しさん
07/06/19 13:18:08
>>189
アレ使えばね
具体的な話はスレ違いなので伏せるけど

191:デフォルトの名無しさん
07/06/19 14:45:55
日本語で書け

192:デフォルトの名無しさん
07/06/19 14:54:14
全くだ
質問内容は察せるが、日本語じゃないよな

193:デフォルトの名無しさん
07/06/19 21:26:28
みなさん、こんばんは。

とある事情により、エクセルのワークシート内に三角波のデータを埋め込みたくなりました。
サインカーブのデータだったら、sin関数でデータを作ったことはありますが、
三角波の場合、どうしたらいいですか?

私がエクセル上でやろうとすると、くどい if文のネストになりそうです。

どなたか、あっさりしたもの、できませんでしょうか?








194:デフォルトの名無しさん
07/06/19 21:46:07
汎用アルゴリズムの話はスレ違い
VBAどころかVBも関係ないし

195:デフォルトの名無しさん
07/06/19 21:58:39
ワークシート埋め尽くす方法ぐらい教えてあげたらw

196:デフォルトの名無しさん
07/06/19 22:13:28
フーリエ展開してしまえw

197:デフォルトの名無しさん
07/06/19 22:48:00
>>189
>エクセルソフトを持ってないので

ちょwww、当たり前だwww

エクセルソフト
URLリンク(www.xlsoft.com)

198:デフォルトの名無しさん
07/06/19 23:24:31
インテルのコンパイラ高いな

199:使えない子
07/06/20 14:59:47
上司からいきなり「調べといて」
キタ──ヽ(´Д`;)ノ──!!!

既存ブックのシート構成は、
(シート1)・書類のテンプレ
(シート2)・いろんな調査項目
という感じで、シート2を開いてマクロを実行すると、
いろんな調査項目が大分類ごとに分けて、
書類のテンプレに記入してそれぞれシートを作る、
ということをしています。

今度は、それらの作られる大分類ごとのシートを
新しいブックに作りたい、ということです。
手作業であれば、
[シートの移動またはコピー]のダイアログで、
[移動先ブック名]に「(新しいブック)」を指定し、
[コピーを作成する]にチェックを入れて[OK]ですが、
これをマクロでやりたい、というのです。

[新しいマクロの記録]をしても記録されないので、
困ってしまいました。
マクロやVBA等でやるには、どうしたらよいでしょうか。
どなたかお力添えください。m(_ _)m


200:デフォルトの名無しさん
07/06/20 15:33:41
>>199
やってみたら記録されたけど?
Sheets("Sheet1").Copy

201:デフォルトの名無しさん
07/06/20 18:34:08
記録を停止してない
なんてオチだったりしてW

202:デフォルトの名無しさん
07/06/21 00:02:18
前任の作ったエクセルファイル+VBAを別ファイルで再構築しているのですが、
errors(0).description の部分でエラー「コレクションが存在しません」になります。
元のファイルでは正常に動いているのですが、
新しいファイルではどのようにしたら回避できるのでしょうか。

203:デフォルトの名無しさん
07/06/21 00:09:31
参照設定

204:202
07/06/21 00:42:58
レスどもです。Excelは2000で、
Microsoft DAO 3.6 Object Libraryの参照設定はチェック済なのですが
それでもエラーが出てしまいます。
他にも必要な参照があるのでしょうか。

205:デフォルトの名無しさん
07/06/21 00:46:51
エラーなければerrorsコレクションはないだろ
まずファイルの問題か環境の問題かはっきりさせること

206:202
07/06/21 01:30:40
確かにそうですね。
言われてみればそもそもここはエラートラップなので
他の部分に問題がある可能性大です。切り分けに挑戦して見ます。

207:193
07/06/21 02:00:10
>三角波のデータ

自分で作りました。
作ったのは関数です。(セルに直接記述するのでVBAとは関係ないですね...)

割とあっさりめの形になったと思います。

言わば、sin関数になぞらえるなら、三角波関数みたいなもんです。

1/(2π)*arcsin(sin(t/T*2π))/(1/4)


自分で自分を褒めてやりたいです。


208:デフォルトの名無しさん
07/06/21 08:37:41
うわ、重そう。つーか、頭悪そう。

209:デフォルトの名無しさん
07/06/21 14:47:30
お聞きしたいんですけど
コンボボックスのプロパティのLinkedCellに値が入らないのですが
どうやって入れるのか教えてください

210:デフォルトの名無しさん
07/06/21 20:48:44
普通に=で代入するか、プロパティウィンドウに入力するかだよ
間違った値入れてなければそれでOK

211:デフォルトの名無しさん
07/06/22 00:02:30
>>208

頭わるいやつに作れるわけねーだろ。

おめぇ、つくってみ?
ってか、つくれる?


212:デフォルトの名無しさん
07/06/22 00:04:35
>>211
本人乙。

213:デフォルトの名無しさん
07/06/22 00:38:54
>>211
煽ったら作って貰えると思って必死だな。
今宵は枕が涙で濡れてるんぢゃねぇの?

214:デフォルトの名無しさん
07/06/22 00:48:37
バイナリーファイル(テキスト形式でないファイル)を開いて、
nバイト目の数字を読み込むっていうプログラムを組みたいのですが、
VBAでできますか?


215:デフォルトの名無しさん
07/06/22 00:56:55
よゆう

216:214
07/06/22 11:34:20
ちょっとしたヒントだけでも教えてつかわさい。


217:デフォルトの名無しさん
07/06/22 12:47:31
open filename for random as #filenumber len=1
get #filenumber, n, buf

218:214
07/06/22 15:54:48
えっ、まじですか。
N88BASICとまったく同じぢゃ・・・


219:デフォルトの名無しさん
07/06/22 15:56:42
そりゃぁ、MicrosoftBasicの派生だからねぇ。どっちも。

220:214
07/06/22 18:54:47
わしもスレに貢献しよう
arcsin(sin(t/T*2π))
って
t/T*2π
と同じでしょうw

つりか・・・まじか?


221:デフォルトの名無しさん
07/06/22 23:32:39
教えて頂きたいです。△にぶつかった後に円を描くようにしたいのですが・・・
難しくて。ご教授下さい。
Sub seven() ' 弾けるボール
ActiveCell.Offset(5, 0).Value = "手" ActiveCell.Offset(5, 1).Value = "○"
ActiveCell.Offset(5, 7).Value = "▲" For i = 1 To 6 For J = 1 To 500
ActiveCell.Offset(5, i).Value = "○" ActiveCell.Offset(5, i).Value = ""
ActiveCell.Offset(5, i + 1).Value = "" ActiveCell.Offset(5, i + 1).Value = "○"
Next J ActiveCell.Offset(0, i + 1).Value = ""
Next i ActiveCell.Offset(5, 7).Select.Value = "☆"
For i = 1 To 3 A = ActiveCell ActiveCell = ""
ActiveCell.Offset(-1, 1).Activate For J = 1 To 500
ActiveCell = A Next J Next i For i = 1 To 3
A = ActiveCell ActiveCell = "" ActiveCell.Offset(1, 1).Activate
For J = 1 To 500 ActiveCell = A Next J Next i
For i = 1 To 3 ActiveCell = "" ActiveCell.Offset(1, -1).Activate
For J = 1 To 500 ActiveCell = A Next J Next i
For i = 1 To 3 A = ActiveCell ActiveCell = ""
ActiveCell.Offset(-1, 1).Activate For J = 1 To 1000
ActiveCell = A Next J Next i End Sub


222:デフォルトの名無しさん
07/06/22 23:51:21
>>220
前者は周期関数になる。元レスは、それを使って三角波にできると悦に入っていたらしい。

223:デフォルトの名無しさん
07/06/23 08:35:42
>>221
スレ違い。>>16

224:デフォルトの名無しさん
07/06/23 13:52:35
>>223
スレ違いで拒否るのもいいが、いい加減過疎ってないか?このスレ
あと質問に答えても質問者もほったらかし多いし・・・
俺はわからんから答えんだけだが

225:デフォルトの名無しさん
07/06/23 15:11:42
> いい加減過疎ってないか?このスレ
この板はこんなものだよ
一応ここは過疎板だから

当然、この板にもここより賑わってるスレはあるが
このスレでも平均以上どころか勢い上位1割に入るほど
もっと静かでもいいくらいだ

226:デフォルトの名無しさん
07/06/24 08:44:32
あるRangeの一番左上のセルの情報を得たいのですが、
どうしたらよいでしょうか?
Offsetだと、Range全体が取得されてしまいます。
左上のセルのRangeだけを得たいのですが・・・

ActiveSheet.Range("資産表[資産]").Offset(0, 0).Select

227:デフォルトの名無しさん
07/06/24 08:47:10
>>226
自己解決しました。

ActiveSheet.Range("資産表[資産]").Cells(1, 1).Select

Cellsでした。Rangeにないかと思ってました。

228:デフォルトの名無しさん
07/06/24 09:49:10
すみません、質問です。

商品NO 値段 日付 〜
100 20 5/1
101 21 5/1

といったデータが600まである表があります。
修正や訂正をするため、月一で直さなければいけないんですが
一回別シートに抽出して,そこで変更をし、元あった行に上書きをする
そのように作れと上司にいわれてしまいました。

抽出し、別シートに移すことは出来たのですが、それを元の所に
上書きするのには、どうしたらいいのでしょうか?
切実に困っています。教えていただけたら嬉しいです。

229:デフォルトの名無しさん
07/06/24 10:20:48
抽出した行と元の行を関連づければいいでしょ
方法はいくらでもあるけど
一番簡単なのは別のシートの同じ行に抽出するやり方かな

230:デフォルトの名無しさん
07/06/24 12:15:43
>>228
商品Noをkeyにして.findメソッドで検索して
コピーするVBAをつくる

231:デフォルトの名無しさん
07/06/24 12:16:46
同じ行への抽出だとわざわざ抽出する意味がないと言われます
関連付けっていうのはどのようにやるのですか?

232:デフォルトの名無しさん
07/06/24 12:37:17
すみません、書き込みしている最中に書き込んで頂いてたみたいです。
わかりました、まだKeyとかFindメソッドの使い方が上手ではないのですが
月曜日にがんばってみます。

もしまた解らなかったら書き込みしにきます。
そのときもよろしくお願いします。
ありがとうございました。

233::
07/06/25 23:05:08
マクロ使って初心者でも簡単に作れるプログラムって何かあります?
課題でなんでもいいから作ってこいって言われたんですけど何を作ればいいのやら。
参考書買うしかないんすかね〜お勧めのWEBサイトありますか?

234:デフォルトの名無しさん
07/06/25 23:07:54
MsgBox "Hello World!"

235:デフォルトの名無しさん
07/06/26 00:59:48
>>1の2番目です!
しつもん!
vlookupのプロパティ?に変数を使いたいんですがうまくいきません
どうすればいいでしょうか?

↓こんなふうにしたい

for count=1 to 10
   Cells(count,4).select
   Activecell.Value = "=Vlookup("count"1,B:C,2,False)
next count

A列とB列を比較して、同じのがあったらC列をD列にコピー、みたいな?
BC列も本当はRange("B65536").End(xlUp).Selectで取得した値を使いたいです。

というかそれ以前にRangeで変数を使う方法すらわからない・・・

236:235
07/06/26 01:07:09
書きまちがいを発見

× Activecell.Value = "=Vlookup("count"1,B:C,2,False)
△ Activecell.Value = "=Vlookup(1"count",B:C,2,False)"
○ ?

ところで="〜"で書くのとApplication.WorksheetFunction .VLookup使うのって何か違うのでしょうか?


237:デフォルトの名無しさん
07/06/26 01:08:48
ExcelVBAで、サブルーチンのネストはできますか?

238:デフォルトの名無しさん
07/06/26 01:19:37
>>235
悪い、したいことが分からない。
>A列とB列を比較して、同じのがあったらC列をD列にコピー、みたいな?
これってVLOOKUPか?

ちなみに
ActiveCell.Value="=SUM(B2:B4)"
ActiveCell.Value=Application.WorkSheetFunction.Sum(Range("B2"),Range("B4"))
との違いは、最初の方は、マクロ実行後にB2からB4のセルの値が変われば、ActiveCell
の値も変わる。でも、下の方は変わらない。
それだけじゃないけどな。

239:235
07/06/26 01:33:37
>>238
説明悪くてすまん

まずA1のセルを選択
B列のどこかにA1と同じデータがあったら(B10とする)C10をD1にコピー
これをA10まで繰り返し

vlookupじゃないの?


当初↓みたいなことをやってたのですが、データが各1万行とかになったら速度が恐ろしいことになりまして。
どうにかこれを高速化したいのです。

for count1=1 to Range("A65536").End(xlUp).Select
  for count2=1 to Range("B65536").End(xlUp).Select
    if Cells(count1,1).value = Cells(count2,2),value then
      Cells(count1,4).value = Cells(count2,3).value
    end if
  next count2
next count1

240:デフォルトの名無しさん
07/06/26 01:47:48
>>239
ああ、確かにVLOOKUPだな。
この感じだと、セルD4に 「=VLOOKUP(A1,B:C,2)」って入るよな。
それをセルD10まで下にコピーするのじゃいけないの?



241:235
07/06/26 01:58:26
>>240
各1万行くらいで行数が不定なのです
まとめて出来る(で、forより早い)方法があればvlookupでなくてもなんでもいいのですが


242:デフォルトの名無しさん
07/06/26 02:17:26
>>241
もう頭が働かないんで…
とりあえず235で質問してたRangeを変数に代入する方法
 Dim targetRange As Range 
 Set targetRange = Range("A65536").End(Xlup)

これでtargetRange.Rowで最終行が何行目か分かる。

ちなみにforでも一万行くらいならあまり時間かからないような気がする。
forのネストにする意味が分からない。一致したらExit For でFor文を
抜ければいいのに。



243:デフォルトの名無しさん
07/06/26 03:15:16
>データが各1万行とかになったら速度が恐ろしいことになりまして

実行中の画面描画をOFFにしてないんじゃない?
そこ変えるだけで解決することもあるよ

244:デフォルトの名無しさん
07/06/26 03:20:47
Application.ScreenUpdating = False
処理の終了段階でTrueに戻して下さい。

Application.EnableEvents = False
処理の終了段階でTrueに戻して下さい。

Application.Calculation = xlCalculationManual
処理の終了段階でxlCalculationAutomaticに戻して下さい。

マクロ動作中にEscキーで止められるのを抑制する。
マクロ動作中に一切のキーやマウス操作を制限する。
Application.Interactive = False
処理の終了段階でTrueに戻して下さい。

但し、この状態で何らかの理由でマクロが停止してしまうと、Excel自体は何も操作できない状態になってしまい、タスクマネージャで強制終了させなければならなくなります。この記述だけは確実に動作検証が終わってから設定して下さい。

マクロ動作中はマウスカーソルを「砂時計」にする。
Application.Cursor = xlWait
処理の終了段階でxlDefaultに戻して下さい。

URLリンク(www.asahi-net.or.jp)


245:デフォルトの名無しさん
07/06/26 04:00:51
>>235
Range("D1").Resize(Cells(Rows.Count, "A").End(xlUp).Row).Formula = _
"=VLOOKUP(A1,B$1:C$" & Cells(Rows.Count, "C").End(xlUp).Row & ",2,FALSE)"

>>244
>何も操作できない状態になってしまい、タスクマネージャで強制終了させなければならなくなります。

イミディエイトウィンドに
Application.ScreenUpdating = True
で、エンターキー

246:デフォルトの名無しさん
07/06/27 00:07:51
 A     B    C       D
東京  東京  東京  =LOOKUP(A1,B:B,C:C)
     大阪  大阪
     愛知  名古屋
     福岡  福岡
     北海道 札幌


とするとD1が名古屋になるんだけど気のせい?

247:235
07/06/27 01:06:07
>>242,243,244,245さん、ありがとうございます。

>>242
逆でして、
for i=1 to Range("A65536").End(Xlup)
Range("A"i).select
next i
みたいなことがしたかったのです。

>>243,244,245
本日ぐぐりまくってとりあえずそこらへんの設定をしました。

やりたいことを綴ってたらえらい長くなってしまったので表にしました(とりあえずodsとxml)
見ていただければ幸いです
URLリンク(bebe.run.buttobi.net)

248:デフォルトの名無しさん
07/06/27 01:10:52
2003personalだとエラーが出て開けない

249:235
07/06/27 01:21:05
うゆー

ってか、今更xlsを発見した。すまねぇ
URLリンク(bebe.run.buttobi.net)

250:デフォルトの名無しさん
07/06/27 01:27:13
なんか昔、これの横バージョンを総合相談所のほうでコード書いた気がする…

251:デフォルトの名無しさん
07/06/27 01:52:19
横バージョンじゃなくて、似たような表の作成だった。
相談所55の部品表のをいじればなんとかなるんじゃないかな。
実行速度もシートをメモリに読み込んですれば大丈夫だろう。
もう寝る。

252:245
07/06/27 17:46:50
'Microsoft Scripting Runtime を参照設定
'結果はG,H,I列の1行目以下に出力

'結果出力用配列 出力行数を上回る行数を確保。下回るとエラー
Dim ans(5000, 2) As String

Dim d As New Scripting.Dictionary
Dim v() As Variant
Dim buf As Variant
Dim vv As Variant
Dim i As Long
Dim n As Long

v = Range("D1", Cells(Rows.Count, "E").End(xlUp)).Value

For i = 1 To UBound(v)
  If d.Exists(v(i, 1)) Then
    d(v(i, 1)) = d(v(i, 1)) & vbTab & v(i, 2)
  Else
    d.Add v(i, 1), v(i, 2)
  End If
Next i

v = Range("A1", Cells(Rows.Count, "B").End(xlUp)).Value

253:245
07/06/27 19:00:43
For i = 1 To UBound(v)
  If d.Exists(v(i, 1)) Then
    buf = Split(d(v(i, 1)), vbTab)

    For Each vv In buf
      ans(n, 0) = v(i, 1)
      ans(n, 1) = v(i, 2)
      ans(n, 2) = vv
      n = n + 1
    Next vv
  Else
    ans(n, 0) = v(i, 1)
    ans(n, 1) = v(i, 2)
    n = n + 1
  End If
Next i

Set d = Nothing
Range("G1").Resize(n, 3).Value = ans

254:デフォルトの名無しさん
07/06/27 21:42:09
をいをいw

255:デフォルトの名無しさん
07/06/27 23:38:13
>>254
どうした?

256:デフォルトの名無しさん
07/06/28 09:32:06
>>252
>>245関連ではないのだが、

> 'Microsoft Scripting Runtime を参照設定
> Dim d As New Scripting.Dictionary

これってなに?VBAから、WSHのオブジェクトを呼び出しているわけ?


257:デフォルトの名無しさん
07/06/28 17:31:08
すいません。質問です。
シート1のあるA1に「A」、A2に「B」、B1に「1」、B2に「2」が入っています。
シート2にはA1に「A」、A2に「3」、B1に「B」、B2に「4」が入っています。
シート1のA1の「A」を検索した上でその下のセルにある「1」をシート2の「A」の横にあるセルに入力し、且つそのセルにあった数値(ここでは3)を右にシフトしたいのです。
VBではどうすればいいですか?

258:デフォルトの名無しさん
07/06/28 19:38:54
Shift:=xlToRight

259:235
07/06/29 00:17:52
相談所55が見つからなかったので自力で作ったよ!

よく考えたら別に一枚のシートじゃなくていいじゃん、ということに遅まきながら気付いたので

for i,j=1 to 各行数
  If Cells(i,1).value = Cells(j,4).value then
    k=k+1
    Sheet("Sheet2").Cells(k,1).value = Cells(i,1).value
  Next j
  〜(マッチしなかったときの処理とか)〜
Next i

的な流れで完成したお!
遅いお!

>>252
何これ!チョー早い!
意味が全然分からないけど今から修行する!さんくす!


ところで=minute(now())とかsecond(now())とか並べてるとyear(now())だけ変になるんだけど何故?


260:デフォルトの名無しさん
07/06/29 00:24:35
値のコピー貼付をワークブック間で行いたいのですが、
' @コピー元
Workbook("").Sheets("").Activate
Range("").Copy
' Aコピー先
Workbooks("").Sheets("").Activate
Range("").Select
Selection.Pastespecial Paste:=xlValues

ファイルをまたぎ、かつ値貼付の場合このような段階を踏まないとエラーになってしまいます。
同シート内での値コピーに使える Range("").Copy Range("").Pastespecial
またはRange("")=Range("") のような簡潔な記入法は無いものでしょうか?

261:デフォルトの名無しさん
07/06/29 00:42:07
ですてぃねーしょん


262:デフォルトの名無しさん
07/06/29 01:05:23
すみませんが、ひとつ教えてください。
階乗を計算する関数を作成したくて、
以下のようなプログラムを書いたのですが、
戻り値が0です。
なぜでしょうか?
(ちなみに、xxをkfactにすると、正常に動くようです)
ぜひ、ご回答お願いいたします。

Public Function kfact(n As Integer) As Integer

Dim i As Integer
Dim xx As Integer

i = 1
xx = 1
Do While i < n
xx = xx * i
i = i + 1
Loop

End Function


263:デフォルトの名無しさん
07/06/29 01:26:15
>>262

Public Function kfact(n As Integer) As Integer

Dim i As Integer
Dim xx As Integer

i = 1
xx = 1
Do While i < n
xx = xx * i
i = i + 1
Loop
'↓これ追加(戻り値)
kfact = xx
End Function

ちなみに階乗なら=fact()って関数あるけど
それじゃダメなん?
VBAで使うならApplication.WorksheetFunction.Fact()ね

264:デフォルトの名無しさん
07/06/29 16:35:16
>>256
わけ。特に珍しい手法ではない。

Dictionaryやfsoは便利なので結構良く使うと思う

265:デフォルトの名無しさん
07/06/29 20:11:27
エクセル2003、ウィンXPです。
以下の様なマクロを作成しました。
データの抽出後に、可視セルの値を順に特定セルに入れて、
印刷したいのですが、思った様に動作しません・・・。
どなたか、お知恵を!


Sub 抽出と印刷()

'書類作成用にデータを抽出。
'シート1のBP列がゼロで無いものを抽出。

Sheets("シート1").Columns("BP:BP").AutoFilter Field:=1, Criteria1:=">0", Operator:=xlAnd

'抽出されたリストのBP列の値をシート2のD68に順番に入れて、2枚ずつ印刷する。
‘抽出から除外された行は印刷からも除外したいので、可視セルだけで処理したい。

Dim i As Long
For i = 2 To Worksheets("シート1").Cells(Worksheets("シート1").Rows.Count, 1).End(xlUp).SpecialCells(xlCellTypeVisible).Row
Worksheets("シート2").Range("D68").Value = Worksheets("シート1").Cells(i, 1).SpecialCells(xlCellTypeVisible).Value

'印刷処理をします。
Sheets("シート2").PrintOut copies:=2, Collate:=True, preview:=True

Next i

End Sub


266:デフォルトの名無しさん
07/06/29 20:28:14
>>256,264
> これってなに?VBAから、WSHのオブジェクトを呼び出しているわけ?
正確には違う
Microsoft Scripting RuntimeはWSHのインストーラーパッケージに含まれてはいるが
Scripting.DictionaryはWSHのオブジェクトではなく、ActiveXの汎用コンポーネントに含まれるオブジェクト
WSHのオブジェクトじゃないから、WSHから使う場合もWSHのオブジェクトであるWScriptオブジェクトみたいに
いきなり使うことは出来ず、CreateObjectなどで外部参照してやる必要がある

267:デフォルトの名無しさん
07/06/29 23:03:58
ShowしたUserFormってどうやって閉じていますか?

UserForm1.Close

こんなのないよね?

Unload Meってのはいまいち分からない。不便。

268:デフォルトの名無しさん
07/06/29 23:08:07
Unload UserForm1

269:デフォルトの名無しさん
07/06/29 23:24:03
>>268
サンクス

270:デフォルトの名無しさん
07/06/29 23:25:06
>>265
どこが思ったように動作しないのか説明がないけど
抽出したあとCopy使えばいいよ

>>267
UserForm1.Hide

271:デフォルトの名無しさん
07/06/30 00:04:38
>>270
Hideは見えなくなるだけ

272:デフォルトの名無しさん
07/06/30 00:46:27
>>271
うん、でも>>268の人がもう答えてたから他のを書いた
あと一応はShowとHide、LoadとUnloadが対応になってるかなと思ってるし

273:デフォルトの名無しさん
07/06/30 01:35:58
Accessではclose使えるのに
どうしてExcelではだめなのでしょう?

274:262
07/06/30 01:50:26
263
ありがとうございます。
ワークシート関数ってオーバーフローするイメージがあるので、あんまり好きじゃないのです。


275:デフォルトの名無しさん
07/07/01 00:50:52
>>92
Application.FileSearchは削除されたよ。
以前から挙動不信だったんで、存在そのものを抹消したのだと思われ。

276:デフォルトの名無しさん
07/07/01 03:23:57
5人で30回じゃんけんをして、出した手をB〜Fに書き込み、勝敗をG〜Kに
書き込むマクロを短めで作りたいのですが、勝敗パターンを作る以外の方法が思いつきません。
よろしくお願いします。


277:デフォルトの名無しさん
07/07/01 04:25:41
>>276
>>16
さようなら

278:デフォルトの名無しさん
07/07/01 08:47:13
>>275
あー確かに挙動不振だな

279:デフォルトの名無しさん
07/07/01 09:19:11
置換について質問です。
以下の様にすると、"さんま"という文字列を"魚"に置換できるのですが、
"さんま"、"タイ"、"いわし"のいずれかの場合に"魚"に置換する場合はどうやって指定しますか?

Selection.Replace What:="さんま", Replacement:="魚"

280:デフォルトの名無しさん
07/07/01 09:31:10
>>279
with Selection
.Replace What:="さんま", Replacement:="魚"
.Replace What:="タイ", Replacement:="魚"
.Replace What:="いわし", Replacement:="魚"
end with


281:デフォルトの名無しさん
07/07/01 09:38:53
>280
ありがとうございます!

282:デフォルトの名無しさん
07/07/01 10:13:19
>>276
総合で訊いてる奴だよな?

283:280
07/07/01 10:20:13
>>281
ぉぃ! まさか、こんなこと訊いてるんじゃないよなぁ...と思いながら、
答えてみたんだが、解決かよ(-_-#);


284:デフォルトの名無しさん
07/07/01 10:57:24
釣りだろ

285:デフォルトの名無しさん
07/07/01 11:57:26
シートAに以下のマクロ実行するボタンがあります。
シートBを選択した状態だと問題なく動作するが、
シートAから実行するとエラーがでます。
最終的にシートA以外は不可視にしたいので、
Worksheets("シートB").select
をしたくないです。
何か良い方法有りますか?

Worksheets("シートB").Range(Cells(1, 1), Cells(100, 100)).Sort Key1:=Range("a1"), Key2:=Range("d1"), Header:=xlYes

286:デフォルトの名無しさん
07/07/01 14:11:49
Set ws = Worksheets("シートB")
With ws
.Range(.Cells(1, 1), .Cells(100, 100)).Sort Key1:=.Range("A1"), Key2:=.Range("D1"), Header:=xlYes
End With



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

4254日前に更新/289 KB
担当:undef