[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/04 11:41 / Filesize : 289 KB / Number-of Response : 962
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

●EXCEL・VBA質問スレ Part2●



1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ]
・まじめにExcelの機能を追及してみようと思う奇特なひと
・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと
・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと
・とにかく漏れにこんな仕事まわすなと怒っているひと
そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです

前スレ
pc11.2ch.net/test/read.cgi/tech/1168308855/

175 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:55:05 ]
>>174
>>169

176 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 00:10:28 ]
偉そうに答えてる人の方がネタに見える…
(1) sum = x + sum
(2) sum = x * 2 - 1 + sum
(3) sum = x ^ 2 + sum


178 名前:デフォルトの名無しさん [2007/06/18(月) 00:55:34 ]
>>177

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

179 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 01:03:28 ]
>>178
Excelより先に算数の勉強をし直した方が良いぞ。

180 名前:169 mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 04:00:12 ]
ネタなのはわかるがiはどこから出てきたんだw

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

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

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

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



184 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 17:31:56 ]
s = "helloWorld"
Mid$(s, 1, 1) = UCase$(Mid$(s, 1, 1))


185 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:32:41 ]
>>185
横レスだが、勉強になった

187 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:41:49 ]
つかMidって参照だけかと思ってたw

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

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

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

191 名前:デフォルトの名無しさん [2007/06/19(火) 14:45:55 ]
日本語で書け

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

193 名前:デフォルトの名無しさん [2007/06/19(火) 21:26:28 ]
みなさん、こんばんは。

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

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

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










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

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

196 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 22:13:28 ]
フーリエ展開してしまえw

197 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 22:48:00 ]
>>189
>エクセルソフトを持ってないので

ちょwww、当たり前だwww

エクセルソフト
www.xlsoft.com/jp/

198 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:24:31 ]
インテルのコンパイラ高いな

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

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

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

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


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

201 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 18:34:08 ]
記録を停止してない
なんてオチだったりしてW

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

203 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:09:31 ]
参照設定



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

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

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

207 名前:193 [2007/06/21(木) 02:00:10 ]
>三角波のデータ

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

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

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

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


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


208 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 08:37:41 ]
うわ、重そう。つーか、頭悪そう。

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

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

211 名前:デフォルトの名無しさん [2007/06/22(金) 00:02:30 ]
>>208

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

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


212 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 00:04:35 ]
>>211
本人乙。

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



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


215 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 00:56:55 ]
よゆう

216 名前:214 [2007/06/22(金) 11:34:20 ]
ちょっとしたヒントだけでも教えてつかわさい。


217 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 12:47:31 ]
open filename for random as #filenumber len=1
get #filenumber, n, buf

218 名前:214 [2007/06/22(金) 15:54:48 ]
えっ、まじですか。
N88BASICとまったく同じぢゃ・・・


219 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 15:56:42 ]
そりゃぁ、MicrosoftBasicの派生だからねぇ。どっちも。

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

つりか・・・まじか?


221 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:51:21 ]
>>220
前者は周期関数になる。元レスは、それを使って三角波にできると悦に入っていたらしい。

223 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 08:35:42 ]
>>221
スレ違い。>>16



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

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

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

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

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

227 名前:デフォルトの名無しさん [2007/06/24(日) 08:47:10 ]
>>226
自己解決しました。

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

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

228 名前:デフォルトの名無しさん [2007/06/24(日) 09:49:10 ]
すみません、質問です。

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

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

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

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

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

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

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

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

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



234 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:07:54 ]
MsgBox "Hello World!"

235 名前:デフォルトの名無しさん mailto:sage [2007/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 mailto:sage [2007/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 名前:デフォルトの名無しさん [2007/06/26(火) 01:08:48 ]
ExcelVBAで、サブルーチンのネストはできますか?

238 名前:デフォルトの名無しさん [2007/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 mailto:sage [2007/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 名前:デフォルトの名無しさん [2007/06/26(火) 01:47:48 ]
>>239
ああ、確かにVLOOKUPだな。
この感じだと、セルD4に 「=VLOOKUP(A1,B:C,2)」って入るよな。
それをセルD10まで下にコピーするのじゃいけないの?



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


242 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 03:15:16 ]
>データが各1万行とかになったら速度が恐ろしいことになりまして

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



244 名前:デフォルトの名無しさん mailto:sage [2007/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に戻して下さい。

www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_090_040.html


245 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:07:51 ]
 A     B    C       D
東京  東京  東京  =LOOKUP(A1,B:B,C:C)
     大阪  大阪
     愛知  名古屋
     福岡  福岡
     北海道 札幌


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

247 名前:235 mailto:sage [2007/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)
見ていただければ幸いです
ttp://bebe.run.buttobi.net/up/src/be_1262.zip

248 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:10:52 ]
2003personalだとエラーが出て開けない

249 名前:235 mailto:sage [2007/06/27(水) 01:21:05 ]
うゆー

ってか、今更xlsを発見した。すまねぇ
ttp://bebe.run.buttobi.net/up/src/be_1263.zip

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

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

252 名前:245 mailto:sage [2007/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 mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 21:42:09 ]
をいをいw

255 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 23:38:13 ]
>>254
どうした?

256 名前:デフォルトの名無しさん [2007/06/28(木) 09:32:06 ]
>>252
>>245関連ではないのだが、

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

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


257 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 19:38:54 ]
Shift:=xlToRight

259 名前:235 mailto:sage [2007/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 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 00:42:07 ]
ですてぃねーしょん


262 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 16:35:16 ]
>>256
わけ。特に珍しい手法ではない。

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

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

267 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:03:58 ]
ShowしたUserFormってどうやって閉じていますか?

UserForm1.Close

こんなのないよね?

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

268 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:08:07 ]
Unload UserForm1

269 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 23:24:03 ]
>>268
サンクス

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

>>267
UserForm1.Hide

271 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 00:04:38 ]
>>270
Hideは見えなくなるだけ

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

273 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 01:35:58 ]
Accessではclose使えるのに
どうしてExcelではだめなのでしょう?



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


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






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<289KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef