Excel VBA 質問スレ Part63

■ このスレッドは過去ログ倉庫に格納されています
2019/09/16(月) 19:34:59.04ID:emfTAhXr0
!extend:checked:vvvvv:1000:512

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part62
https://mevius.5ch.net/test/read.cgi/tech/1561303297/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2019/10/17(木) 22:03:59.43ID:uSN2w5EG0
>>333
え?
違うの?
じゃあわかりにくいのは、あんたの能力の問題だね。
俺にはわかりやすいから。
2019/10/17(木) 22:53:38.34ID:lelQayoPx
シートモジュールとブックモジュールはただのクラスモジュールだからなぁ
コンストラクタとデストラクタがないぶんシートモジュールだけが特殊だが
2019/10/17(木) 23:08:12.09ID:a6vhi3mO0
そう、オブジェクトが何か分かっていれば何の問題もない
しかし現実問題、Excelを使うのは一般事務。setっていつ使うのかなかなか理解できない層が中心なのだ
2019/10/17(木) 23:49:25.80ID:lelQayoPx
implementsステートメントで組み込みのワークシートオブジェクトのインターフェースを継承すればシート用モジュールになります、って感じの仕組みならよかったよな
ユーザー定義クラスだって属性宣言を先頭に持って来ればクラス用モジュールになりますって感じの扱いで良かったし
2019/10/18(金) 00:09:11.06ID:RulO09Tc0
オマイラのスーパーテクを俺に継承してくれや。
2019/10/18(金) 01:12:13.81ID:Kn6PgWdna
>>338
VBAを上手く使うというのはつまるところ「可能な限りVBAを使わない」なので教えろと言われても難しいな
業務フローのレベルからVBAが最小限になるように設計するんだよ
2019/10/18(金) 01:29:19.13ID:sk0uHZY+x
PowerQueryとかPowerPivotとか標準的なExcelの組み込み機能で出来る作業をVBAでやってるのを見るけどああいうのも時間の無駄だわな
2019/10/18(金) 06:28:43.63ID:rwfK/g890
vbaで何でも出来るから全部vbaでやる・・・それがシンプルでカッコイイ事だと思いこんでいた時期がありました
2019/10/18(金) 08:24:07.64ID:RulO09Tc0
武器を持った奴が相手ならVBAを使わざるを得ない
2019/10/18(金) 08:28:11.67ID:RulO09Tc0
>>339
>>340
>>341
レスありがとう。万能なExcelに選ばれた言語、それが、VBA!

VBA王に俺はなる!
2019/10/18(金) 12:32:43.64ID:xgSV8V5dp
>>343
そんなこと言わんと
VBAをとっとと卒業してC#辺りに入りなさいな。
他の言語も勉強するとVBAのコードの組み方もガラッと変わるよ。

例えば.Net系をやればクラスやインターフェースの理解がグッと深まるから
テスト項目も減らせる組み方が出来るし、変更点の改修も少ない組み方が出来るようになる。
2019/10/18(金) 12:35:35.40ID:YN+VnyL5M
そういう所まで進みたい人とそうでも無い人がいるって事を理解しなよ
2019/10/18(金) 12:45:18.66ID:dVFolCOsM
>>345
どちらにせよVBAを極めても意味はないという帰結に違いはないな
2019/10/18(金) 12:47:17.38ID:as8acMuSa
本当にプログラミング好きな人はVBAじゃ満足しないだろ
VBAを極めるとはどういう状態かわかりませんが
2019/10/18(金) 12:55:00.41ID:YN+VnyL5M
>>346
ちょっと理解出来ないです
2019/10/18(金) 14:34:31.34ID:C4vTbpVj0
2つ質問させてください

Sub Main()
Dim n As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws1cell As Range
Dim r As Long
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(Worksheets.Count)
n = ws1.Cells(Rows.Count, 5).End(xlUp).Row + 5
For r = 1 To ws2.Cells(Rows.Count, 5).End(xlUp).Row
Set ws1cell = ws1.Range("E:E").Find(ws2.Cells(r, 5).Value, lookat:=xlWhole)'項目名が違い、達成率が100%でない場合は開始日・終了日・達成率を更新
If ws1cell Is Nothing And ws2.Cells(r, 10) < 1 Then
ws1cell.Range(ws1.Cells(n, 8), ws1.Cells(n, 10)).Value = ws2.Range(ws2.Cells(r, 8), ws2.Cells(r, 10)).Value
n = n + 1
Else'達成度が進んだ場合は開始日・終了日・達成度を更新
If ws1cell.Value = ws2.Cells(r, 5).Value And ws1cell.Offset(0, 3) < ws2.Cells(r, 8) Then
ws1cell.Offset(0, 3) = ws2.Cells(r, 8)
ws1cell.Offset(0, 4) = ws2.Cells(r, 9)
ws1cell.Offset(0, 5) = ws2.Cells(r, 10)
End If
End If
Next r
End Sub
項目名が違う時にエラーが出てしまいます
If ws1cell is nothingの部分で変数を解放しているから問題なのかと考えていましたが、ws1cell = "" , 0に書き換えてもウォッチウィンドウで見ると
set ws1cellを通った後もnothingのままになっていました
setを通れば変数を定義出来ると思っていたのですが、どのようにすれば解決できますか?
よろしくお願いします
2019/10/18(金) 14:35:51.85ID:C4vTbpVj0
改行エラーが出てしまったため2つに分けました
VBAを使い始めて1ヶ月弱なのですがC#でエクセルを操作出来るようになりたいと考えております
VBAで作ったプログラムを元にして、C#を学ぶ方法は無いでしょうか?
書き方が全然違うとの話を聞いたので、諦めて最初から覚えるしかないかと途方に暮れております
よろしくお願いします
2019/10/18(金) 14:58:09.86ID:irJy6XEP0
なんでvbaでできる事をいちいちC#でやろうとするか意味解らんよ
2019/10/18(金) 15:40:17.44ID:71CpEOK5d
今後C#を使う予定であれば、VBAで出来る事だとしてもC#を使う時間を増やした方が習得が早いと思ったからです
2019/10/18(金) 19:07:24.11ID:Kd4kiXAf0
>>349
一番目のIF文の条件間違えてね?
これだとNothingのときに中で使うことになっちゃうよ
2019/10/18(金) 19:07:29.23ID:7YrisXmNd
文法が全く違う言語だから何をどう頑張ろうがベースにはできない。
せいぜい同じ結果を出せるかどうかの演習材料にしかならんよ。
2019/10/18(金) 19:11:29.96ID:vO06UtuM0
>>350
覚えるっていうか移植先の作法に従って書き換えるだけ
356デフォルトの名無しさん (ワッチョイ 1ef7-V+wO)
垢版 |
2019/10/18(金) 19:17:45.06ID:Kd4kiXAf0
>>349 書き直すけど
If ws1cell Is Nothing And ws2.Cells(r, 10) < 1 Then は
ws1cellがNothingのときじゃないと通らない。なのにそのあとでws1cell.Range〜とかws1cell.Offsetなんてやると当然エラーになる。
Not ws1cell Is Nothing みたいに反転させないと。
2019/10/18(金) 19:35:18.82ID:YN+VnyL5M
セルがどういう時にnothingになるのか分かって条件に指定してるのか怪しい気がする
2019/10/18(金) 19:38:22.84ID:xgSV8V5dp
>>350
VBAやって一ヶ月ならそのままVBAやっておけばいいよ。別に急いでるわけでもないんでしょ?

VBAやってツールの幾つかでも作って、コードがそらで書けるようになったらまずVB.Netをやる。

文法はそっくりだけど構成が違うし見たこともない命令も沢山あるから多分苦労すると思う。
でもここさえ乗り越えてしまえばObject指向の何たるかが大体解るようになるからそうしたらC#に入ればいいよ。

C#はVBA→VB.Netのときとは逆に構成がVB.Netとよく似ていて文法が違う。あと型が厳しい。
でも、ま、VB.Netを覚えてしまえばC#も7割方理解したって言えると思う。

何も手を着けてない状態なら最初からC#をやることを勧めるけど
折角VBA始めたんだから遠回りにはなるかも知れないけどそういう楽な方法もあるよ。
2019/10/18(金) 20:19:32.44ID:L2N4rS5+M
それ以前に>>349
> 項目名が違う時にエラーが出てしまいます
じゃなくてどの行でどんなエラーが出てるのかを書けよ
ID:Kd4kiXAf0は超親切だからレスしてくれてるけど普通はスルーされて終わりだよ
2019/10/18(金) 21:48:21.62ID:/2Um4idM0
>>356
条件が反対だったんですね…
If文の条件をもう一度書き直してみます
丁寧にありがとうございます

>>355
>>358
将来的にはエクセルに集約しすぎて重くなってしまっているデータを、誰でも使えるように軽くしたいと考えている位なので、まずはプログラムに慣れて行きます
プログラムの考え方だけでも次のステップの練習問題には使えると思うので、数をこなしてみます
ありがとうございます

>>359
すみませんでした
次から質問する時は気をつけます
2019/10/18(金) 21:50:15.03ID:vO06UtuM0
>>349
関係ないけど変数の中に何か入れることを定義とは言わない
定義はDimの行でやっている
2019/10/18(金) 23:10:26.23ID:3qufjhb3x
>>361
もっと細かく言うとDimでやっているのは定義ではなく、あらかじめ定義されたデータ型の適用を宣言してその型に適合したメモリ領域を確保することなんだけどな
未知の型を宣言するとエンジン側で型検査できずにコンパイルエラーになることを考えたら分かる
2019/10/18(金) 23:16:13.52ID:1ynBc/Lo0
>>360
そういう目的があるならまず覚えるべきはSQLだね
VBAだろうがJavaだろうが.Netだろうが
どの言語をやっていてもデータベースを扱う限り
SQLはまず使わないことがない。

ま、中にはEntityFreamworkなんてSQLを使わずにDBに同期してデータを
引っ張るなんて場合もあったりするけどSQLは最初の内に覚えておいて絶対損はしないよ。
2019/10/18(金) 23:22:21.64ID:dVFolCOsM
>>363
VB系言語はそれだけやってると変な癖がついて他言語への適応が困難になるから、
プログラミングの基礎の基礎だけ習得したらあまり使い込まないですぐに他に移った方がいいよ
2019/10/19(土) 00:34:54.51ID:UvKzTNAx0
>>364
そこは割り切り。
どうせどんな言語やってたってちょろっとしたツールを作るには
VBAでやった方が手っ取り早いことの方が多いんだから。
どの仕事場でも大概Excelは入っているしね。

それにVB系は癖が強いから他言語の習得を阻害するというのも
個人の適応能力やセンスによるものも大きいからちょっと何とも言えないし。

むしろ俺みたいに適応力やセンスが皆無なら
やれ構造化言語だ、object指向だ、関数型言語だって変わるたびにチンプンカンプンなところから始めるから
結局否応なくその言語に合わせることになるんだけどね。
2019/10/19(土) 02:56:34.09ID:Z3LWqSJp0
.netを始める上での壁は文法や型なんかより膨大なクラスを把握することだからVBでもC#でも手間は変わらん
しかも日々増殖したり仕様が変わったりするから手に負えない
2019/10/19(土) 05:58:33.57ID:4RrPMtib0
VBAは枯れに枯れた技術って意味で物凄い安定感がある

>>365
さすがに関数型言語はもう無いんじゃね?
一時遊びでlispやってたけどあれは頭の切り替えに難儀した。あれが業務だったら退職しますわ
2019/10/19(土) 06:05:45.30ID:UvKzTNAx0
>>367
ちょい前までExcelに入るんじゃないかって噂で騒がれてたPython、あれ関数型言語だよ
2019/10/19(土) 06:21:12.47ID:4RrPMtib0
>>368
あれ、まだ関数型言語に分類されるのか
2の頃はそうなんかなl−と思ってたけど、3になるとすっかりオブジェクト指向担ったと思っていたのに
2019/10/19(土) 06:47:40.57ID:UvKzTNAx0
うーん、なんて言うか
Microsoftが出してる言語、複数やったことがある人なら何となく知ってると思うんだけど
何か中途半端にとどめておくのが好きみたいな傾向があって、

例えばVBAや旧VB6なんかでもObject指向の概念は
取り入れてるんだけどインターフェースはあるけど
.Netでいう継承は出来ないとか

.Netでも関数型言語の概念は取り入れててlinqやrambda式が使えるけどデータ分析や機械学習が
出来ないって訳じゃないけど苦手だったり。

次に何か出るときはその変のことが統合されて
いい感じになったものが出るんだろうけど
多分次もその次に出て来る新しい概念を
中途半端に取り入れたところで落ち着くような
そんなことを繰り返すような気がするね。
2019/10/19(土) 06:54:51.77ID:a0xT/TLW0
>>365, >>368
Pythonが関数型とか適応力やセンスの問題じゃなくて単なるアホやろw
2019/10/19(土) 07:39:52.38ID:UvKzTNAx0
>>371
何となく言いたいことは解るけど
一応パラダイム対応してるからObject指向でも書けるけど
それだけだったら他に洗練された言語いっぱいあるしやっぱり関数型色が強いしね
2019/10/19(土) 07:43:44.99ID:VlF8OMgza
ここの人たちはどんなシステム作ろうとしてるんだ
事務処理をちょい効率化したい程度の簡単なプログラムならVBAが最高
2019/10/19(土) 08:08:42.95ID:UvKzTNAx0
>>373
そうなんだよね。
よく「別言語の〜でやれば〜行で出来るのに」って
言う人がいるけどあれは違うと思う。

VBAは凄く間口が広い言語で
EXCELが有ればどこでも組める言語。
手軽だから何かをちょろっとやらせるには
非常に使い勝手のいい言語なんだよね。
特にExcelが絡んだときは。

間口が広いってことは初心者からお年寄りまで
誰にでも優しい言語だからそりゃ至らない部分も沢山あるけど
他の言語で簡単に出来る部分でExcelが苦手な部分を
どうやっていい感じに作りこんで行くかを考えるのもまた醍醐味。

例えばXNAとかでテトリス作った後でもう一回
じゃ、今度はVBAで作って見ようかなと思わせる
何かがある言語だと思う。
2019/10/19(土) 08:10:42.89ID:Mtyg747cM
>>372
どこを見て関数型と言ってるんだ?
パラダイムとか言いたいだけやろw
2019/10/19(土) 10:54:26.76ID:CSoOYtrTa
VBAのいいところはほぼ会社のPCで普通にはいっているExcelでいろんなことができるようになることだろ
C#だなんだっていうやつは職場のPCにかってにVSとかいれていいとでも思ってるのかな
それをわかってないバカが多すぎ
2019/10/19(土) 11:14:07.78ID:Vb23X7hcd
データの整理とか手作業でやらされてるのを、ちょっと自動化して楽したいだけなのに、なんでC#とか使わなあかんの
2019/10/19(土) 11:32:54.08ID:a0xT/TLW0
>>376
今時のWindowsにはC#コンパイラは標準で入ってますけど?
> それをわかってないバカが多すぎ
自己紹介乙w
2019/10/19(土) 11:43:29.38ID:ZEihazemx
ちょっとした処理のためにCOMのOfficeのGUIを起動させ続けなきゃいけないってのがVBAの最大の難点でしよ
単なるデータ整理をする環境として見るとOfficeは高機能すぎるし効率が悪い
PowerShellなんてWindows標準でSDKとCUIがインストールされてるしマルチプロセスもOKだからな
2019/10/19(土) 12:03:08.48ID:hNMTCzKgp
Powershellは.NetFramework抜いたらただのshell
.NetFrameworkにへばりついてるただの寄生虫
2019/10/19(土) 12:04:29.37ID:EjAyXMTtd
>>378
そのC#コンパイラが使いにくいw
メモ帳で頑張るのが苦痛だw
2019/10/19(土) 12:06:19.27ID:EjAyXMTtd
>>379
寧ろ、OfficeのGUIが起動してるのが前提だよ。
ExcelのファイルをどうにかしたいだけだったらVBAである必要全く無いんだから。
2019/10/19(土) 12:09:07.46ID:EjAyXMTtd
ちなみにここはVBAのスレであってExcelブックをどうにかしたいスレじゃない。
でも、なぜか競合しないのにVBAでないものを書く人が沸いてくるね。
2019/10/19(土) 12:09:32.04ID:a0xT/TLW0
>>380
> Powershellは.NetFramework抜いたらただのshell
流石にそれはアホすぎ
パイプにオブジェクト流せるとか配列処理とか従来のshellとはかなり違う
2019/10/19(土) 12:10:48.45ID:a0xT/TLW0
>>381
面倒と言うならわかる
VSなんて要らんよっていうだけの話だし
2019/10/19(土) 12:29:53.54ID:Tgsi24Yea
パワーシェルってなんだよ
難しいな
2019/10/19(土) 12:37:43.59ID:Tgsi24Yea
理解したわ
2019/10/19(土) 13:01:01.88ID:pCXt87yDd
>>373
開発職やってるが、Excelじゃなくて他の環境で作るべきではと思うようなシステムをExcelて依頼されることがよくある
Excelっていう環境が使う側にとっても手軽で都合がいいんだろう
2019/10/19(土) 13:21:58.93ID:ZEihazemx
>>388
俺は逆に発注側だけど、Excelの方が都合が良いというより、Excelしか想像できない奴に要件整理のタスクを与えて社内稟議まで通してRFP出してしまう感じ
Excelで作ろうが他のシステムで作ろうが発注側は中身が理解できないから取捨選択すらしてない
2019/10/19(土) 13:22:25.60ID:Z3LWqSJp0
ある意味閉じた環境だからテストが楽なんだよ
もちろん完全なサンドボックスではないけど
2019/10/19(土) 13:27:49.07ID:EjAyXMTtd
>>388
それあるね。
ネットワークとユーザー認証絡む奴でExcelには向かないからWebとかで作った方が良いって言ったんだけどさ、予算が無いんだってさ。
2019/10/19(土) 13:37:35.97ID:cIlA6SsdM
csc教えてくれてありがとう。世界が広がったわ。
エクセルで社内chatアプリとか作り放題できそう。
2019/10/19(土) 23:16:31.79ID:Ryiq5UZK0
A1セルに飛びたいブックのアドレスが書いてある(C:\test1.xlsx)環境下
test1.xlsxが開いていなければWorkbooks.Open(Filepath)で開く
test1.xlsxが開いていなければハイパーリンクで飛ぶ(2重起動しないため)
にしたいのですが、どうしてもできません。

G4にハイパーリンクをせっていしましたが、できません・・・どこが悪いのでしょうか?

Dim myChkBook As Workbook
Dim bookname As String
On Error GoTo ErrHdl
Set myChkBook = Workbooks("test1.xlsx")

'"開かれています。"
'ハイパーリンク起動G4
Range("G4").Hyperlinks(1).Follow NewWindow:=True
Exit Sub

ErrHdl:
' "開かれていません。"
(↓pas_kombetu1は設定済みで以下のマクロは実行できます。)

Dim Filepath
Filepath = pas_kom1

Dim targetWorkbook As Workbook
Set targetWorkbook = Workbooks.Open(Filepath)
2019/10/19(土) 23:20:25.07ID:Ryiq5UZK0
↑393です。間違えました。訂正します
A1セルに飛びたいブックのアドレスが書いてある(C:\test1.xlsx)環境下
test1.xlsxが開いていなければWorkbooks.Open(Filepath)で開く
test1.xlsxが開いていればハイパーリンクで飛ぶ(2重起動しないため)
にしたいのですが、どうしてもできません。

G4にハイパーリンクをせっていしましたが、できません・・・どこが悪いのでしょうか?

Dim myChkBook As Workbook
Dim bookname As String
On Error GoTo ErrHdl
Set myChkBook = Workbooks("test1.xlsx")

'"開かれています。"
'ハイパーリンク起動G4
Range("G4").Hyperlinks(1).Follow NewWindow:=True
Exit Sub

ErrHdl:
' "開かれていません。"
(↓pas_kombetu1は設定済みで以下のマクロは実行できます。)

Dim Filepath
Filepath = pas_kom1

Dim targetWorkbook As Workbook
Set targetWorkbook = Workbooks.Open(Filepath)
2019/10/19(土) 23:20:42.32ID:Ryiq5UZK0
↑393です。間違えました。訂正します
A1セルに飛びたいブックのアドレスが書いてある(C:\test1.xlsx)環境下
test1.xlsxが開いていなければWorkbooks.Open(Filepath)で開く
test1.xlsxが開いていればハイパーリンクで飛ぶ(2重起動しないため)
にしたいのですが、どうしてもできません。

G4にハイパーリンクをせっていしましたが、できません・・・どこが悪いのでしょうか?

Dim myChkBook As Workbook
Dim bookname As String
On Error GoTo ErrHdl
Set myChkBook = Workbooks("test1.xlsx")

'"開かれています。"
'ハイパーリンク起動G4
Range("G4").Hyperlinks(1).Follow NewWindow:=True
Exit Sub

ErrHdl:
' "開かれていません。"
(↓pas_kombetu1は設定済みで以下のマクロは実行できます。)

Dim Filepath
Filepath = pas_kom1

Dim targetWorkbook As Workbook
Set targetWorkbook = Workbooks.Open(Filepath)
2019/10/19(土) 23:27:37.60ID:yen3fKlK0
ハイパーリンクでどこへ飛ぼうとしているのか?
天国か?
2019/10/20(日) 04:33:33.09ID:9oZ0eOj0r
mychkbook.activate
range~
2019/10/20(日) 14:29:15.27ID:udtUjyhnx
>>395
やりたいことはこういうことかな?
処理の内容からみて、GoToでエラーハンドラに飛ばす必要はないと思う


' 開いているブックの集合に対してループを回し、順番にmyChkbookにセットして名前を調べ、test1.xlsxが見つかったらループを終了する

Dim myChkbook As Workbook

For Each myChkbook In Workbooks
If myChkbook.Name = "test1.xlsx" Then Exit For
Next myChkbook

' ループが終了した段階でmyChkbookにセットされているブックの名前がtest1.xlsxでない場合、test1.xlsxが開かれていないことを意味するので、test1.xlsxを開いてmyChkbookにセットする

If myChkbook.Name <> "test1.xlsx"
Then Set myChkbook = Workbooks.Open(pas_kom1)

' myChkbookをアクティブにしてハイパーリンクをフォローする

myChkbook.Activate
Range("G4").Hyperlinks(1).Follow NewWindow:=True
2019/10/20(日) 17:59:43.40ID:WrbRE/qYa
どうせ設定とかじゃね
2019/10/22(火) 08:37:21.30ID:Ppw3/Jpc0
プログラムじゃなくて、プログラミング言語とは…驚いた
学生の頃、友人がyaccとか字句解析とか構文解析とか言ってたが、その世界か…分からん

スーパー中学生誕生、プログラミング言語わずか数週間で開発、
U-22プログラミング・コンテスト2019 2019/10/21
https://www.bcnretail.com/market/detail/20191021_142131.html

「もっと人間にとって扱いやすい、自分の言語をつくってみたかった」。
10月20日に東京の秋葉原コンベンションホールで開催された第40回「U-22プログラミング・コンテスト2019」の
最終審査会で、見事、経済産業大臣賞(総合)を受賞した開成中学校3年の上原直人さん(15歳)は、
独自プログラミング言語「Blawn」を発表した。

IT業界の経営者など、並みいる審査員を驚かせたのは、完成度の高さはもちろんのこと、今年8月からわずか
数週間で完成させたスピードだった。
一次審査の応募期間7月1日〜9月2日に着想から開発、完成まで一人で仕上げたという。

◆C言語を使ったのは今年7月
それまでPythonを使っていたという上原さんは発表の中で、「今年の7月か8月にC++を始めたが、扱いにくかった。
もっと可読性の高い構文とメモリの安全性や速度を高めたいと思った」と、開発のきっかけについて語った。

質疑応答で審査員から、「7月にC++を使ったということは、Blawnはそれ以降につくられたということですか?」
と聞かれて、上原さんが「7月中旬に構想して構文解析を行って、プログラムを書き始めたのは8月ごろ」と答えると、
会場にどよめきが起きた。文句なしの受賞だった。

上原さんは、ほかにもスポンサー企業のデジタルガレージとサイボウズ2社の賞と、当日の模様を配信した
ニコニコ生放送の視聴者による賞など4冠を達成した。

Blawnの特徴は、型名の記述が一切不要、構文の可読性が高い、すべての関数/クラスがC++でいうところの
テンプレート関数/クラス、コンパイル速度と実行速度が速い、メモリが安全などだ。

また、Blawnの言語名は「Blue Lawn(青い芝)」からもじったもので、隣の芝が青く見えるほど、既存の言語の
不満を解消できるような良い言語にしたい気持ちを込めたという心憎い演出もあった。
2019/10/22(火) 15:11:43.53ID:qPForpUI0
なぜ天才は日本語プログラミング言語を作ってくれないのか
2019/10/22(火) 15:18:35.17ID:N/F1Z5u20
日本語プログラム言語あるけど流行ってない
2019/10/22(火) 15:19:56.38ID:xfWb2k0X0
変数に2バイト文字使えるだけでもかなりありがたいぞ
2019/10/22(火) 15:30:45.72ID:xJDh6jyea
>>401
日本語が曖昧で向いてないだろ
2019/10/22(火) 15:40:40.34ID:9HPDColwx
自然言語のルールそのままでプログラミング言語を実装するわけじゃないから日本語が曖昧云々ってのはズレてる
英語のit とかtheyとかbeだって曖昧極まりないし
2019/10/22(火) 16:09:09.07ID:GMYZfzoF0
>>403
> 変数に2バイト文字使えるだけでもかなりありがたいぞ
今時使える処理系の方が多いだろ
2019/10/22(火) 16:09:15.44ID:xfWb2k0X0
>>404みたいなのは何も考えてない+自分に自信を持てないアホだから相手しても時間の無駄だぞ
2019/10/22(火) 16:17:32.52ID:xfWb2k0X0
>>406
え、マジかわざわざ挑戦するようなことでもないから知らんかった、スマン
.NETはともかく他に何かあるんか?web系は全滅と思うけど変わってるのだろうか
2019/10/22(火) 17:34:47.60ID:wz2D8YEyr
>>397 >>398
ありがとう。解決しました
2019/10/22(火) 17:37:00.61ID:GMYZfzoF0
>>408
それこそVBAでも使えるしVisual Studioで使えるC/C++, C#, VB.NETはもとより、GCCとかPython3でも使える
2019/10/22(火) 17:42:31.34ID:lfmCyloCM
vlookupを最下行まで入れたくて、検索範囲を絶対参照にしたいんだけどできるの?
$maxrow$じゃだめだよね
2019/10/22(火) 18:05:19.82ID:N/F1Z5u20
>>411
.Rows.Count
2019/10/22(火) 19:26:57.40ID:yzv1f2K60
108万行探すつもりかよww
A:Aとかじゃダメなのか。
2019/10/22(火) 19:34:37.46ID:xfWb2k0X0
100行しかデータが入ってなくても、A:Aみたいに列全体にすれば自動的にA1:A100みたいに解釈してくれるよ
2019/10/22(火) 20:37:15.07ID:8AVeU+tzd
>>409
どっちもあまり良いコードとは言えんよ。
activateは使わない方が良い。
その後のRangeの前を省略しない書き方のが良い。
2019/10/22(火) 20:49:46.38ID:IKwAwtn1x
>>415
ApplicationレベルのWorkbookActivateイベントで何らかの処理を噛ませている可能性があるから、Activateメソッドが無意味とは言いきれない
2019/10/22(火) 20:51:16.87ID:xfWb2k0X0
それは考えすぎw
ハンドラまで作れる人ならこんな質問しないよ
418デフォルトの名無しさん (JP 0H82-S3Tg)
垢版 |
2019/10/22(火) 21:38:55.73ID:tIwQFwn0H
Excelで、「行ごとに違う色をつけるが、1行目だけ何も色を付けない」というVBAの書き方を教えてくんさい。
2019/10/22(火) 21:46:01.16ID:lomrvhbna
>>418
https://support.office.com/ja-jp/article/-1-行おきまたは-1-列おきに色を設定する-30002ce0-7a1c-4d70-a70c-4b6232f09f5e
VBAなど不要
どうしても一発でやりたいならマクロの記録を使えばいい
2019/10/22(火) 21:48:09.80ID:fx5uI0000
>>418
3行目から始まる、4行ごとのsannpuru
色(65535の部分)はマクロの記録で取ってくれ
あともう少し真面目に聞いたほうが回答が尽きやすい


For i = 3 To 100 Step 4
Rows(i & ":" & i).Interior.Color = 65535
Next
End Sub
421デフォルトの名無しさん (JP 0H82-S3Tg)
垢版 |
2019/10/22(火) 22:45:35.38ID:tIwQFwn0H
>>420
すみません&有り難うございます。

具体的な目的を書かずに適当に質問してしまったのですが、やりたいことは

1.行ごとに違う色を入れる
2.1行目だけ何もしない(色を変えない)
3.2についてはIF文を使う

なのですが、3.が上手くいきません。
*************************************************************************:
Sub xxxxxxx()

Dim i As Integer
Dim z As Integer
Dim y As Integer

z = 500 '最大行数
y = 300 '最大列数

For i = 1 To z '繰り返し処理を使い、変数は1〜500
Range(Cells(i, 1), Cells(i, y)).Interior.ColorIndex = 22 'セル範囲の指定
Next i '500行目までを22番色で埋める
For i = 1 To z Step 2 '1行飛ばしで500行目までを13番色で埋める
Range(Cells(i, 1), Cells(i, y)).Interior.ColorIndex = 13 'セル範囲の指定
Next i

End Sub
**********************************************************************↓こういう感じのIF文を入れたい
If i = 1 Then '1行目だけ何もしない
Range(Cells(i, 1), Cells(i, y)).Interior.ColorIndex = 00
Else
2019/10/22(火) 23:10:48.22ID:N/F1Z5u20
>>421
Ifにする必要がわからない
Range(Cells(1, 1), Cells(1, y)).Interior.ColorIndex = 0 を最後に入れるか、
最初に入れてForの開始行を1にしなければいいと思うんだが
上手くいかないとはどういかないの?
2019/10/22(火) 23:10:49.55ID:Qb6PF4Ej0
そもそも2行目からスタートすればいいのでは
2019/10/22(火) 23:11:06.82ID:IKwAwtn1x
縞模様のテーブルスタイルをあらかじめ定義しておいて、テーブル変換してスタイルを適用してからテーブルを範囲に転換するのが一番楽だよ
2019/10/23(水) 06:33:53.41ID:3xysxys80
>>421
ifは見づらいだけだよ
100%、forを2から始めた方が良い

For i = 1 To z '繰り返し処理を使い、変数は1〜500
if i >1 then
'ここに全部入れる
endif
Next i
2019/10/23(水) 08:42:06.06ID:F6dTtsAKM
>>421
範囲内を塗るだけなら、最初のFor〜Nextはいらない。
範囲全体を22番で塗った後に奇数行に処理するのではなく、
範囲全体を13番で塗った後に偶数行に処理する、
とすれば、1行目の処理のIf文いらない。

Sub xxxxxxx()
Dim i As Integer
Dim z As Integer
Dim y As Integer
z = 500
y = 300

Range(Cells(2, 1), Cells(z, y)).Interior.ColorIndex = 13
For i = 2 To z Step 2
Range(Cells(i, 1), Cells(i, y)).Interior.ColorIndex = 22
Next i

End Sub


>2.1行目だけ何もしない(色を変えない)
っていうのは元々色が付いていたらその色から変えてはいけないって意味だよね。
そうすると
1行目を含めて塗った後、勝手にInterior.ColorIndex = 00であったとと決めつけて処理するのはよろしくない。
2019/10/23(水) 08:44:11.12ID:u2hf1X8z0
>>422-425

有難うございます。
間違いなく、Forのところを2行目からにする方が簡潔でいいと思うのですが、無理矢理if文を入れるとするとどうすべきかを知りたかった部分もあったので、大変助かりました。
2019/10/23(水) 08:56:18.27ID:u2hf1X8z0
>>426
全く仰る通りです。
「00で塗らなければならない」ではなく、「何もしない」なのだから、そのように書くのが筋ですよね。
有難うございます!
2019/10/23(水) 09:28:03.44ID:zKPC6jha0
奇遇判定ならIfよりSelect Caseで分けると楽かな

Dim cngRng As Excel.Range
Set cngRng = Excel.Application.Range("A1:E20")
'範囲から上一列を除外
Set cngRng = cngRng.Offset(1, 0).Resize(cngRng.Rows.Count - 1, cngRng.Columns.Count)

Dim colorNum As Long
Dim r As Excel.Range
For Each r In cngRng.Rows
Select Case r.Row Mod 2 '行番号を2で割った余り
Case 0
colorNum = 1 '1=Black
Case 1
colorNum = 6 '6=Yellow
End Select
r.Interior.ColorIndex = colorNum
Next r
2019/10/23(水) 10:14:44.78ID:pOBwJdgAM
リーダブルコードとか読んでみたらいいんじゃないか
2019/10/23(水) 10:35:16.84ID:Bv/wwg6O0
z = 500 '最大行数

For r = 2 To z Step 2
  '偶数
Next

For r = 3 To z Step 2
  '奇数
Next
2019/10/23(水) 10:39:27.17ID:9YAnqBFd0
Rangeをつかってセルの範囲を指定した後に
条件を付け加えて条件に合うまで自動で繰り返し処理を行って条件通りになった時に選択セルに文字や数字を入れるにはその下にIfとかで条件を増やしていけばいいの?
2019/10/23(水) 12:32:05.46ID:YTHJUc03r
>>432
条件が簡単で範囲が狭ければ上にあるようにselect caseが分かりやすい
for each c in range("a5:b20")
select case c
case 1
c=c+1
end select
next
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況