Excel VBA 質問スレ Part73
レス数が950を超えています。1000を超えると書き込みができなくなります。
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ
ExcelのVBAに関する質問スレナリ
コード書き込みや作成依頼もOKナリ
※前スレ
Excel VBA 質問スレ Part70
https://mevius.5ch.net/test/read.cgi/tech/1616072923/
Excel VBA 質問スレ Part71
https://mevius.5ch.net/test/read.cgi/tech/1621914481/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured よっぽどじゃないと他人向けのマクロは作らない方がいいよなあ
独学だから、頼まれた機能を実現するために仕方なく作った時は気を使った >>848
いや、VBAで作って混乱引き起こすような人はどの言語使っても混乱引き起こすよ。
理路整然と書く人はアセンブラでも綺麗なコードを書く。 ジャンプ命令の後の命令が実行されてからジャンプするような意味不明な設計でそんなこと無理だ PS2のデバッグで出会ったわそれ
Mipsだったかで 数年前までVBAで結構組んでたんだけどちょっと必要があって使ってみたらセーブに10分くらいかかる
調べてみると ごめんなさい途中でかきこんでしまいました
VBAのコードが長いとセーブに時間がかかるとあったのでモジュールを削除してみましたが変化なし
そこで新規にbookを作ってコピペでVBAのコード他すべての要素をコピペしたら普通にセーブできたのですが
これはどういった原因が考えられるでしょうか?
ちなみに別のPCで使ってみたら普通にセーブできました マクロ付きブックの保存なんて普通は1秒で終わる
10分なんてあきらかに異常だし、たとえ10秒でもおかしい
HDDの故障やウィルスをまず疑うレベル そんなことは分かってるから質問してるんですが日本語読めてますか?w >>850
それな
で、職場で仕事がなくなる。なんだかよくわからん状態になる
>>859
ブックの中にゴミデータが溜まってる
・条件付き書式
・名前の定義
特に条件付き書式はコピペで増えるので要注意。vbaでコピペを繰り返すマクロを繰り返すうちに、恐ろしく重くなる事がたまによくある >>862
なるほどそれで新規BOOKにコピペするとごみが消えるから軽くなるってことですね
ありがとうすっきりしました >>837
> 一般的にデバッグはコーディングの10倍ぐらい経験や知識が必要な作業だから初心者には荷が重い
ものすごい納得がいく。プログラムの力のかなりな部分を
設計力とデバッグ力が占めてる気がする。 >>865
あ。禁断のセリフが。
昔の2ちゃんで「氏ね」とか「市ね」とかわざわざ誤字にしてた
理由知らない世代なんだろうなあ…。 >>865
日本語まともに理解できないからしょうがないんだよなw 超初心者です。
10個のブックで、それぞれのブックに同じ名前の4種類のシートがあり、
各シートのE10〜D12に入力されている値を抽出したいんですが、
1つのセルを指定するやり方しかわからず…
できれば10個のブックから一括で抜き取りたいんですけど、どう書けばいいでしょうか。
現時点でできたのはダイアログでファイルを選択して、指定のシートから1つだけ抜き出してくる方法です。
これを複数のセルを抜き出したい(可能なら複数のブック指定して抜き出したい)です。 >>868
別のPCなら普通にセーブできるって言うから、PCの故障を疑ったんでしょう
862の回答だと、別のPCでうまくいく説明になってない
お前のほうが日本語理解できてないんじゃね? >>869
こんな感じで二重ループにする
ブック名やシート名は必要に応じて配列に入れておく
For Bok = 1 To 10
For Sht = 1 To 4
Range(" ") = Workbooks("ブック" & Bok).Worksheets("シート" & Sht).Range("D10:E12").Value
Next
Next もう解決したかもしれんが
保存にやたら時間がかかるエクセルファイルとは自分の経験だと
非表示にされたシートに画像が貼られまくってたって事があったなvba開いてみたらシートが異常に多くて気づいた
パソコンリテラシーない人はこういうファイルを平気でメールで送ろうとするよねw 知らんけどxlsm形式だと社内メールは送れんわうちじゃ ボタンのあるシートを
ボタン削除しないままシート削除して
新たにシートを作るっていうコードにしてたら
無茶苦茶ゴミが溜まってファイルが肥大化した挙げ句、
最終的にボタンを貼り付けられなくなった >>873
リテラシー以前の問題で、何がどうなってるかさっぱりわからない
ただ、開くのに1分ぐらいかかるけどとりあえずは使えるのでつかて下さい、lという感じ >>873
その画像が沢山貼ってあるシートコピーして
VeryHiddenで隠して送りつけてやればいい。
やられたらやり返す
倍返しだ!! ひとつに見えていても2つのボタンが重なっていることもあるぞ VBAのchengeイベントで
セルB1に12、セルC1に3、と入力されたら
D1に12/3と日付が自動で出力され
かつ
C1が空白ならD1も空白
C1が文字ならD1も文字になるようにできるでしょうか?
初心者じみた質問で申し訳ありません >>882
できればVBAでお願いします
わがままですいません >>883
そうか
>D1に12/3と日付が自動で出力され
この場合の、年がわからない
・常に1980年(デフォルト)
・常に「chengeイベント」のあった年
・今が12月なら来年
など >>883
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo finalty
'無限ループ回避
Application.EnableEvents = False
'C1セルが空白は終了処理へ
If Cells(1, 3) = "" Then GoTo finalty
'C1セルが文字列の場合は、そのまま放り込む。それ意外は日付
If WorksheetFunction.IsText(Cells(1, 3)) Then
Cells(1, 4).Value = Cells(1, 3).Value
Else
Cells(1, 4).Value = DateSerial(Year(Now()), Cells(1, 2), Cells(1, 3))
End If
'終了処理
finalty:
Application.EnableEvents = True
End Sub
とりあえず作ったけど、B1が文字列、c1が数字の時にエラーになるな
B1とC1で日付判定したほうがよかったのだろうか >>886
「できるでしょうか?」と聞かれているだけなのに引っ掛かる馬鹿 全く内容が同じ投稿を何度も目にしている気がする
その度に丁寧な回答を貰ってるけど
その処理流行ってるの? >>887
大丈夫?
>>889
同じ内容を貼る人:
相手にしてもらえるので、同じ質問を貼り続ける
承認欲求が満たされない人間の末路
回答者:
腕が上がるので気にせずに回答すればオッケー そっか
>>886 だけど空白なら終了よりも空白の時は出力先も空白って条件があるから出力先にClearContentsかけた方が良さそう
その後にB1とC1をそれぞれIsNumericでTrueならB1 & "/" & C1をDatevalueで日付データにして出力先へ
あとはElseで文字列として結合して出力とかどうだろう? >>886
・「C1が空白ならD1も空白」にしないといけないのにやってない
・B1, C1 以外のセルが変更された場合でも無駄な処理が走る
・Cells( ) と Cells( ).Value とバラバラ
・finalty という単語はない >>892
まあ多少エラーがあっても大まかな流れがわかればいいんでねえの?
後は自力だろ
特にエラー処理関連は条件がわからないとやっても無駄だし
>・finalty という単語はない
まずこっから突っ込まないと
>>880
>VBAのchengeイベントで >>883
早速のご返答ありがとうございます
とりあえずB1には文字型は入力されないので、教えて頂いた構文で試してみたいと思いますよ
スレの雰囲気悪くしてすいません
先生たちには
感謝します VB.Netでもgotoとかgosubとかremとか残ってるんだよなぁ
いつになったらこんな負の遺産使えなくするのやら
variantとか早々に消したくせに
先にVB.Netの方が消えてしまいそうだ >>900
DOS時代の古いアプリを移植して使ってるとこが意外とあるらしい
だから昔ながらの行番号なんかも使えるようになってる https://sugoikaizen.com/excel_list/vba-macro-01/
超初心者です。上のサイトを参考に非表示のシートを全表示にするようにしたいのですが、実際に使ってみるとアクティブシート?が切り替わって切り替わってチカチカしてしまいます。
その切り替わりのチカチカ、アクティブを切り替えないでシートを表示させることってできますか application.screenupdating=false
処理
application.screenupdating=true >>892
・「C1が空白ならD1も空白」にしないといけないのにやってない
すまん
・B1, C1 以外のセルが変更された場合でも無駄な処理が走る
ifで分岐させてinsideかInspectorでexitsubだ
・Cells( ) と Cells( ).Value とバラバラ
すまん
・finalty という単語はない
たいぽ
>>897
>Go Toとか草
vbaはエラー処理がエグいので、gotoを使う方が簡潔になる
今回のように、分岐処理が型に依存するような時はあえてエラーを発生させて、gotoでまとめる方が楽
総論としては「trycatch欲しい」だろうな >>901
VBできたのはWindowsになってからだな
DOSのときはMS-Cじゃね 行番号はDOS自体が登場する以前のROM BASIC全盛の頃の話
Microsoft BASICの独自拡張版を各メーカーが移植して搭載してた
FDD普及後も暫くはN88 BASICなどは生き残っていたけどDOS登場後は急速に廃れていった >>906
信長の野望はBASICで作ってあったな シートのデータを
文字コードutf-8、改行コードLFでファイルに書き出す方法教えてください >>909
Excel単体では無理
アドインか、マクロか、外部ツールで変換か UTF-8 でも、BOM の有無で2種類ある。
先頭3バイトが「0xEF 0xBB 0xBF」なら、BOM有り
BOM有りUTF-8
BOM無しUTF-8(UTF-8N)
Windows だけはBOM有りだけど、
一般的に、Linux などのウェブではBOM無し
最近のWindowsでは、BOM無しも使えるかも知れない >>904
先日教えていただいた構文は間違いですか?
今、試したら自分のイメージに近い動作はするような感じです
後は自分で試行錯誤してみたいです
また質問してしまうかもしれませんが
自力でやってみます 空白でないセルの末尾に「様」という文字列を一括追加するマクロを教えてください
置換処理も組み込んで一括で処理したいのでマクロでやりたいです
出来ればコピペで使えるとありがたいです
環境はWin10でExcel2016です
よろしくお願いします 置換も末尾に様を付けるのも関数式で行けるがオートフィルでぶわぁーっとやるんじゃアカンのか?
マクロでやっても処理内容的にはあまり変わらんぞ? この先をずっと繰り返す作業なので、複数の置換と文字列付加を1つのマクロにまとめたいのです いつものあいつの釣りとあまりに馬鹿過ぎる質問はお断りです
また、Excelの使い方すらわからない人はお帰りください >>914
俺も>>915と同意見で、関数かオートフィルでいいと思う。常時必要なら、関数の作業列を作ってそれを参照するとか
それでもいいなら
A列が名前の場合。
Sub Macro3()
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
For i = 最終行 To 1 Step -1
If Cells(i, 1).Value <> "" Then Cells(i, 1).Value = Cells(i, 1).Value & "様"
Next
End Sub 何回もマクロ動かして 山田様様 ってなってわけわからんようになる >>919
まぁこれは直接書き換える案件じゃないんだよな
名前列 & (”様”|"御中")が良い
このやり方だと、最後が「様」で終わる名字があるとバグるんだよな。昔、「羽様」って顧客からクレームがあって「いいんですけどね・・・」って感じだった
まぁ、珍しい名前だしいいと思う >>913
致命傷は一点
・「C1が空白ならD1も空白」にしないといけないのにやってない
以下のコードで直した
・B1, C1 以外のセルが変更された場合でも無駄な処理が走る
重い処理じゃない。どうせ入力箇所増える
重いなら>>904の内容で修正するか再度聞けば良い
・Cells( ) と Cells( ).Value とバラバラ
どうでもいい
Cells( )はCells( ).Valueに解釈される
暇なら統一すれば良い。特に意味はない
・finalty という単語はない
どうでもいい
もちろんfinalityの打ち間違えは認める
変数名なんてなんでもいい
自己弁護でもないが、そのためにも関数やクラスは影響が最小限に済むように、短くまとめる必要がある >>920
> 昔、「羽様」って顧客から
岡山県赤磐市か奈良県生駒市かな? >>922
東京か埼玉、もしくは神奈川。そもそも「羽様」様、以外にも最後が「様」になる名字はそれなりにいるぞ >>921
のコード書き忘れてたわ
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo finalty
'無限ループ回避
Application.EnableEvents = False
'C1セルが空白は終了処理へ
If Cells(1, 3) = "" Then
Cells(1, 4) = ""
GoTo finalty
End If
'C1セルが文字列の場合は、そのまま放り込む。それ意外は日付
If WorksheetFunction.IsText(Cells(1, 3)) Then
Cells(1, 4).Value = Cells(1, 3).Value
Else
Cells(1, 4).Value = DateSerial(Year(Now()), Cells(1, 2), Cells(1, 3))
End If
'終了処理
finalty:
Application.EnableEvents = True
End Sub >>914
Sub hoge()
Dim targetRange As Range
Dim targetCell As Range
Set targetRange = ThisWorkbook.Sheets(Sheet1.Name).Range("A1:J10")
For Each targetCell In targetRange.Cells
If targetCell.Value <> vbNullString Then
If Right(targetCell.Value, 1) <> "様" Then
targetCell.Value = targetCell.Value & "様"
End If
End If
Next
End Sub
対象シートを変えるならSheets(Sheet1.Name)のSheet1の部分を変えてくれ
シート名じゃなくてシートのオブジェクト名であることに注意な。
今はA1から下10セル、右10セルの範囲に絞っているが、変えたければ
Range("A1:J10")の部分を変えてくれ。 >>914
文字列追加じゃなくて表示形式で対応したらどうだろ
セルの元データを書き換えるのはなんか嫌らしい感じがする
Selection.NumberFormatLocal = "@ ""様""" >>930
マイナス、0、プラス、文字列で分岐できる
どこかにそのフラグを持たせれば分岐できるが・・・それなら最初から様と御中書いたほうが早い >>931
基本は様でフラグ立てたところだけ御中とか つーか普通敬称つけるのは印刷するときだけじゃね
エクセルのデータに組み込む必要ないような >>935
イカに様付けるとイカサマだな
楽しいのか? 銀行の「行」を消して「御中」に直してた画像あったな だいえーだいえーいえぃいえぃいえぃいえぃ。
だいえーとってもいえぃいえぃいえぃいえぃ。
↓続き。 >空白でないセルの末尾に「様」という文字列を一括追加
これ、今「様」がついてたらつけるなっていう要件じゃないんじゃね
そうじゃないなら、羽様が、羽さん様なのか羽様さんなのか区別できるデータじゃないと不可能だぜ
普通に考えて名称と敬称と分けてもつだろ 5chはおじいさんの巣窟ですよ。
子供は他所で遊んだ方が良いですよ。 もう25年前に近くのダイエーなくなってダイクマになった(もうそれもなくなってマンションになってるけど)
一駅先にグルメシティの形で残ってるけどほとんど行かない ここまでの情報で、神奈川県秦野市ではないか?と自作AIがはじき出しましたが。
あってる? >>949
合ってる
ダイクマ発祥の地なのでAIなら楽勝かとw レス数が950を超えています。1000を超えると書き込みができなくなります。