Excel VBA 質問スレ Part72

レス数が900を超えています。1000を超えると表示できなくなるよ。
2021/07/18(日) 08:42:15.37ID:KskL7bEXd
!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
2021/09/01(水) 19:56:12.78ID:zi3lAKaz0
>>804
実行すると対象セルが全て空白になってしまいましたw
2021/09/01(水) 20:21:01.01ID:QyYX1GEf0
>>806
どういうセルがあるの?

例えば、
="0"&1
だと
01
という文字列が残るんだけど
俺は365だけど、バージョンによって挙動が変わるのかもしれない。あんまりナイキはするけど
2021/09/01(水) 20:25:24.16ID:vx5cHFWE0
>>802

> >>798
> C1: = IF(B1 = "", "", A$1 & "/" & B1)
> これ入力して下へずらっとでいいんじゃないの

ありがとうございますm(_ _)m
早速試してみます
2021/09/01(水) 20:53:46.87ID:vx5cHFWE0
C1: = IF(B1 = "", "", A$1 & "/" & B1)

B列に文字が入力された場合
文字がそのままC列に表示されれば
完璧なんですが
難しいでしょうか?
2021/09/01(水) 20:56:51.38ID:QyYX1GEf0
>>809
C1: = IF(B1 = "", "", B1)

2021/09/01(水) 20:58:57.68ID:zi3lAKaz0
>>807
別のシートからマスタのコードをTEXT関数、表示形式指定(例えば"00000")で表示させてるような状態です
計算結果→02010に>>721を実行すると2010(数値)、>>804を実行すると空白になってしまいます
今使っているのは2016ですが365環境もあるので後ほど試してみます

.Copyと.PasteSpecial xlPasteValuesで高速化できる方法があったりするのでしょうか
こちらに書き込む前に
For Each SC In Selection
SC.Copy.
SC.PasteSpecial xlPasteValues
で試した際は自力コピペしたほうがよっぽど早くてどうしようもありませんでした
2021/09/01(水) 21:28:52.21ID:zi3lAKaz0
>>807>>811

例えば、
="0"&1
だと
01

別シートに打ち込んで実行したところたしかに空白にならず文字列で表示されました
ただ
="0"&1
="0"&2
="0"&3
の3行で実行すると全て消えて空白です…
2021/09/01(水) 21:42:45.23ID:WLDLOoPA0
>>806
>>805
valueプロパティの値がコピーされた感じかw
2021/09/01(水) 21:44:13.89ID:zi3lAKaz0
>>812
連投すみません

3セルのうち
="0"&1

="0"&3
を選択すると文字列表示になりました

="0"&1
="0"&2

="0"&4を選択すると1と2は消えて4だけ文字列で残ります…
2021/09/01(水) 21:45:19.70ID:RPMibrUxM
>>809
C1: = IF(ISTEXT(B1), B1, A$1 & "/" & B1)
2021/09/01(水) 22:25:27.20ID:QyYX1GEf0
>>812>>814

Sub foo2()

Application.Calculation = xlCalculationManual ' 手動計算にする
Application.ScreenUpdating = False ' 描画を停止する

For Each sc In Selection.SpecialCells(xlCellTypeFormulas, 23)
sc.Value = sc
Next sc

Application.Calculation = xlCalculationManual ' 手動計算にする
Application.ScreenUpdating = False ' 描画を停止する

End Sub

これの
sc.Value = sc
の部分を
sc.Value = sc.value

sc=sc
など色々試したが、上記がうまくいった
なお一体どういう型変換が行われているのかまるでわからない模様
2021/09/01(水) 22:52:06.46ID:h29OAeAi0
>>816
型指定宣言していないため、Forで指定するSCがVariant型
なので、SCはVariant(Rangeとは限らない…配列の1要素目みたいなイメージ)
ただ、SC.ValueとするとSCはRangeと明示されるのでそういう動きになる

んじゃないかなぁ
2021/09/01(水) 23:29:26.76ID:2gcT+4EJ0
IE問題どうするかなぁ
2021/09/01(水) 23:36:24.86ID:zknSVFy00
VBA止めるいいきっかけじゃん
2021/09/01(水) 23:42:06.70ID:KwKwZOB6d
>>818
なくなるのはアプリ
コンポーネントは残ると明言されてる
でもコンポーネントをウィンドウに貼り付ければ簡単にアプリが完成してしまう
2021/09/01(水) 23:55:13.89ID:QyYX1GEf0
>>818
まあlそのうち誰かがなんとかするやろ
2021/09/01(水) 23:58:40.93ID:lmopnPTl0
ちゃんとしたシステム入れればいいだけ
2021/09/02(木) 00:17:40.36ID:vUCj94gS0
ちゃんとしたシステム(爆笑)
2021/09/02(木) 00:50:02.40ID:PlnEFAD30
>>814
まとめるとこういうこと?
Sub Macro7()
Application.Calculation = xlManual
Application.ScreenUpdating = False
myAddress = Split(Selection.SpecialCells(xlCellTypeFormulas, 23).Address, ",")
For Each EE In myAddress
Range(EE).Copy
Range(EE).PasteSpecial xlPasteValues
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
2021/09/02(木) 06:01:59.22ID:pGyB2U1O0
>>815
> >>809
> = IF(ISTEXT(B1), B1, A$1 & "/" & B1)

C列に無事、日付が表示されB1が文字列ならば
文字が表示されたのですが
2回目以降
例えば1回目の入力でB列に
 B
9/2
9/3
9/4
9/5

上記のように表示した後に2回目にB2に終了日の文字列を入力し再表示したら
 B
9/2
終了日
9/
9/

上記のようにB3以降にA1の値が反映されてしまいます
2回目以降B列が空白であれば空白にしたいのですがむずかしいでしょうか
2021/09/02(木) 06:17:15.44ID:8TUhFQ840
>>825
「○○であれば○○としたい」って言語化出来ているのであればあとはIf文で判定するだけでどうにかなるはずだよ
一回自分がやりたい事を頭からケツまでしっかり書いてフローチャートを作ってみた方がいい
○○であれば○○としたいの時には当てはまらない場合はどうするかもしっかり書くことを忘れずにね
2021/09/02(木) 06:20:57.63ID:pGyB2U1O0
連投で申し訳ありません!
言葉たらづですいません。結局わたしがやりたいと思ってるのは
A1に数字を入力
B1〜B2に数字を入力するとC列に結合た日付を表示しされる下記のような表です

  A  B  C
1 9  2 9/2

2    5 9/3

3      9/4

4      9/5

ただB2に文字列が入力されたらC2に文字列が表示され
C3以降は空白になってくれればいいのですが
2021/09/02(木) 06:25:01.18ID:pGyB2U1O0
下記コードをここでお教えいただきもう少しで出来そうなのですがわたしにはむずかしすぎて

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo err

'B1B2じゃなければ終了
If Intersect(Target, Range("B1:b2")) Is Nothing Then Exit Sub

'とりあえずクリア
Range("C1:C100").Clear

'メイン。整数じゃなければerrに飛んでコピーして終わり。trycacheみたいな事がしたかった
最初 = Cells(1, 2)
最後 = Cells(2, 2)
'
If (Int(最初) = 最初 And Int(最後) = 最後) Then

行 = 1
For i = 最初 To 最後
Cells(行, 3) = i
行 = 行 + 1
Next

Exit Sub
End If

'整数以外
err:
Range("C1:C7").Value = Range("B1:b2").Value

End Sub
2021/09/02(木) 06:57:24.18ID:pGyB2U1O0
間違いました!
A1に数字を入力
B1〜B2に数字を入力するとD列に結合た日付を表示しされる下記のような表です

  A  B  C    D
1 9  2  2   9/2

2    5  3   9/3

3       4   9/4

4       5   9/5

ただB2に文字列が入力されたらC2に文字列が表示され
C3とD3以降は空白になってくれればいいのですが
2021/09/02(木) 07:37:19.92ID:O3nuwBcWM
>>818
何か面白いことがわかったら教えて
2021/09/02(木) 07:53:36.77ID:8TUhFQ840
>>829
(クリア処理)
If IsNumeric(Range(″B1”).Value) And IsNumeric(Range(“B2″).Value) Then
Dim TgtAry() As String
ReDim TgtAry(0 to Range(”B2”).Value - Range(”B1”).Value, 3 to 4)

Dim AryCnt As Long
For AryCnt = 0 to Ubound(TgtAry, 1)

TgtAry(AryCnt, 3) = CLng(Range(”B1”).Value) + AryCnt
TgtAry(AryCnt, 4) = Range(”A1”).Value & ″/″ & TgtAry(AryCnt, 3)

Next

Range(Cells(1, 3), Cells(1 + Ubound(TgtAry, 1), 4).Value = TgtAry

End If
832デフォルトの名無しさん (アウアウウー Sa85-HBgv)
垢版 |
2021/09/02(木) 09:40:00.71ID:lpxNteAka
もうあきた
2021/09/02(木) 09:50:07.01ID:S+z0tXCPd
>>831
ありがとうございますm(_ _)m
家に帰ったら早速試してみます
2021/09/02(木) 10:17:54.51ID:61uHr+ZW0
>>829
どんどん条件追加してんじゃねーよw

一旦最初から最後まで説明する感じで整理してみて
2021/09/02(木) 10:23:41.27ID:61uHr+ZW0
とりあえず>>827の条件
C1に入力して下にずらっとしてみて
= IF(ISTEXT(B6), B6, IF(B6 = "", "", A$1 & "/" & B6))

ただしBのセルを空白にするのは手動

>>829のC列は何やねん?
2021/09/02(木) 11:39:09.52ID:S+z0tXCPd
>>835
すいません!
コードの基本的なところを教えてもらえれば
あとは自力で何とかしようと思ったのですか
思ったより難しくて(泣
2021/09/02(木) 12:26:07.30ID:Lpp+cK/ya
もおお面倒くせええ
最初ユーザーフォームがどうとか言ってたろ? そっちの管理者に言うのが手っ取り早いんじゃないの、まさか自作じゃあるまいし
2021/09/02(木) 12:47:54.81ID:jQ7od4vmd
月と日の範囲らしき値をいれるようだが日だけチェックするとかが意味わからないんだよね
それと今まで教えてもらったコードが実際に何ができるかわかならければ今後も同じような質問ずっとするのかな
2021/09/02(木) 13:06:30.53ID:PlnEFAD30
質問者は分散して書き込まれたわけのわからん条件を再度まとめて書いてくれないかな
文章力がないようだから番号を振って箇条書きがいいと思うよ
そこから仕切り直し
2021/09/02(木) 13:44:53.64ID:S+z0tXCPd
わかりました!
すみません
2021/09/02(木) 14:04:46.60ID:jQ7od4vmd
>>840
今までの経緯を見た感じだと単純な要件は
・A1には月、B1には開始日、B2には終了日が設定される
・C列には設定された開始日と終了日を使って開始日〜終了日の値が列挙される
・D列には設定された月とC列の値を使って日付が列挙される ※単純に月/日の文字列でよいのか(年を考慮した日付でなくてよいのか)
まずこれだけの要件であれば
>>828で関数などを使わずにD列の設定を追加すればよい(Cells(行, 4) = CStr(Cells(1, 1))&"/"&Cells(行, 3))
初期化の検討も関数がなくなれば「とりあえずクリア」の範囲をC1:D100にでもすればよい
エラーについては関数がなくなれば今のままでも要件を満たすのでは
842デフォルトの名無しさん (ワッチョイ 6e8e-CEQY)
垢版 |
2021/09/02(木) 16:20:28.02ID:tb5mIgdu0
>>840
お前、いい加減にしろや
2021/09/02(木) 16:37:31.01ID:61uHr+ZW0
>>829
B2に文字列が入力された時D2がどうなるかが無い
2021/09/02(木) 16:56:20.51ID:61uHr+ZW0
>>840
A1 月
B1 開始日
B2 終了日 (文字列の時もある)
C列 B1からB2の連番 C1は常にB1 (B2が文字列ならそれをC2へ、以降空白)
D列 月/日 D1は常に開始月/日 (C2が文字列ならそれをD2へ?、以降空白)

でいいなら

C1 = B1
C2 = IF(ISTEXT(B2), B2, IF(ISTEXT(C1), "", IF(C1 + 1 <= B$2, C1 + 1, "")))
D1 = A1 & "/" & C1
D2 = IF(ISTEXT(C2), C2, A$1 & "/" & C2)

C2とD2は下にずらっとね
2021/09/02(木) 17:33:27.50ID:pGyB2U1O0
>>831
自分のコードとどう組み合わせていいのかわかりませんでした
エラーになってしまい自分には無理そうです
もう少し勉強して出直したいとおもいます
本当にありがとうございます
2021/09/02(木) 17:40:30.06ID:pGyB2U1O0
>>841
明瞭な説明ありがとうございます
とりあえず業務上で必要なところは日付問題だけなので
それさえ解決できれば今後はなんとかなりそうです
2021/09/02(木) 18:06:17.19ID:jQ7od4vmd
>>846
こんな感じでいいんじゃないの?
Private Sub Worksheet_Change(ByVal Target As Range)
'B1B2以外は終了
If Intersect(Target, Range("B1:B2")) Is Nothing Then
Exit Sub
End If
'クリア
Range("C1:D100").Clear
'開始日のチェック
If CheckValue(Cells(1, 2)) = False Then
Cells(1, 3) = Cells(1, 2)
Cells(2, 3) = Cells(2, 2)
Exit Sub
End If
'終了日のチェック
If CheckValue(Cells(2, 2)) = False Then
Cells(1, 3) = Cells(1, 2)
Cells(2, 3) = Cells(2, 2)
Exit Sub
End If
'開始日から終了日を設定
nRow = 1
For nValue = Cells(1, 2) To Cells(2, 2)
Cells(nRow, 3) = nValue
Cells(nRow, 4) = Cells(1, 1) & "/" & nValue
nRow = nRow + 1
Next
End Sub
2021/09/02(木) 18:06:38.29ID:jQ7od4vmd
Private Function CheckValue(ByVal aValue As String) As Boolean
For nLoc = 1 To Len(aValue)
If InStr("0123456789", Mid(aValue, nLoc, 1)) = 0 Then
CheckValue = False
Exit Function
End If
Next
CheckValue = True
End Function
2021/09/02(木) 18:06:56.77ID:1Fx06KPw0
まじでこんな仕様を業務で使ってんの?
2021/09/02(木) 18:13:18.91ID:24Y/Debo0
Range型に入れられるものを変数に入れず処理するのほんと嫌い
Cells(1,1)=2 とか
せめて行と列をLong型の変数にしてやってあげて
851デフォルトの名無しさん (ラクッペペ MM66-sNgg)
垢版 |
2021/09/02(木) 18:40:44.69ID:95p8ZRX9M
>>849
日付の列だけあればいいよな
見た目は書式でどうとでもなるし
2021/09/02(木) 19:39:27.31ID:vUCj94gS0
>>849
ここは日本やぞ
2021/09/02(木) 20:22:46.11ID:JA6Fm57Z0
散布図において、点と点を結ぶ直線の色を、その系列の系列名参照先セルの背景色と同じ色に一括で変えるコードを教えてください。
背景色が設定されてない場合は色は変更しなくて良いです。

例えば下記画像のデータと散布図があるとします。
B1:E1セルの背景色を赤色に塗って、F1:G1セルの背景色を青色に塗ってマクロを実行すると、散布図の直線のうち、#1から#4が赤色に変わり、#5、#6が青色に変わり、#7以降はそのままの色を維持するようにしたいです。

https://i.imgur.com/lLWaKl2.jpg
https://i.imgur.com/Pdf7drp.jpg

系列が莫大な数のグラフだと設定から一つずつ色を変えるのは大変なので自動化したいです。
よろしくお願いします。
2021/09/02(木) 21:07:03.00ID:pxeaKQvs0
質問スレなのにコード全てを教えてもらおうとするのはいかがなものかね
ある程度自分コード書いてここが分からないとかならわかるが
2021/09/02(木) 21:24:04.85ID:DFz3pANA0
でも>>1で作成依頼もOKって書いてるしなあ
2021/09/02(木) 21:26:06.23ID:LsFuz3WEH
>>853
ほい
ワークシートの中にグラフが1つしかないこと、全データがグラフに使われていることが条件

Sub Macro1()
  ActiveSheet.ChartObjects("グラフ 1").Activate
  For k = 1 To Cells(1, Columns.Count).End(xlToLeft).Column - 1
    c = Cells(1, k + 1).Interior.Color
    If c <> &HFFFFFF Then ActiveChart.FullSeriesCollection(k).Format.Line.ForeColor.RGB = _
               RGB(c Mod 256, Int(c / 256) Mod 256, Int(c / 65536))
  Next
End Sub
2021/09/02(木) 21:38:11.49ID:pxeaKQvs0
>>855
それはすまない
2021/09/02(木) 23:50:56.62ID:JA6Fm57Z0
>>856
ありがとうございます。
頂いたコードをちょっと改造したら出来そうです。
2021/09/03(金) 00:34:19.18ID:7VSa3gcD0
FullSeriesCollectionってなんだよ
動かねーw
2021/09/03(金) 04:25:34.03ID:kuvugUtS0
>>858
>>859
おめー、すごい本音と建前だな
そのギャップ、埋める必要はない
吐露したいときはあるからな
2021/09/03(金) 06:02:06.71ID:1mYCibIj0
>>844
試してみたら、なんとかなりそうです!
何度もご助言いただき
ありがとうございます
2021/09/03(金) 07:17:18.60ID:staQfXFI0
>859
検索した方が早いぞ
俺も知らないけど検索したら内容は秒で理解できた
https://docs.microsoft.com/ja-jp/office/vba/api/excel.fullseriescollection
2021/09/03(金) 13:32:27.55ID:LfmEXbOQ0
Bookを別名保存して配布用データを作成する場合に、.xlsx にしてそのファイルにVBAコードは存在しない状態にする方法はあるのでしょうか?
2021/09/03(金) 14:03:11.01ID:XbDGKeUz0
>>816>>824
どちらも求めている結果になりました
824は自分でも試してもエラーになっていたので助かりました
型変換でこんなにつまづくは思わなかった(未だに原理は理解出来ていない…)
ありがとうございました!
865デフォルトの名無しさん (ワッチョイ 878e-m4tS)
垢版 |
2021/09/03(金) 15:55:21.72ID:yaNRzQx30
>>863
全角文字の拡張子だからテキストファイルか何かにするのか?それとも単なる馬鹿か?
2021/09/03(金) 15:59:38.52ID:FrRqokaz0
>>865
寂しいの?
867デフォルトの名無しさん (ワッチョイ 471d-FHff)
垢版 |
2021/09/03(金) 16:58:35.16ID:w5919iNp0
フリーランスエンジニアになってからの年収推移を公開【現在年収1000万】
https://dev-memo.net/fleelance_1000/
【実体験】仕事ができない新卒エンジニアでも月収70万フリーランスになれる理由
https://off.tokyo/blog/shinsotu-engineer-free-lancer/
フリーランスエンジニアは年収900万円までは余裕!現役フリーランスエンジニアが徹底解説
https://flytech.work/blog/8142/
フリーエンジニアの平均年収!未経験が年収1000万円を超える方法とは?
https://shikin-pro.com/guide/18633
【コラム】フリーランスは本当に自由なのだろうか?
https://zenn.dev/cat2pgm/articles/42bb40bf121342
「月100万円」稼ぐ猛者も、副業を始めるIT人材が急増している真の理由
https://xtech.nikkei.com/atcl/nxt/column/18/01572/021900001/
フリーランスエンジニアになって月100万稼いだ話
https://comblog.net/2020/07/06/freelance-100/
素人からでも「まずは月収50万以上」を目指したい方向け【フリーエンジニア・コンサル】
https://aruto.org/freelance-consulting
フリーランスのエンジニアやるなら45歳までに貯金5000万円作れないと死ぬ説
http://uma66.hateblo.jp/entry/2019/04/07/153119
2021/09/04(土) 00:30:43.37ID:HdS4X7vy0
>>862
自宅で使ってるExcelが2010がFullSeriesCollectionをサポートしてないというオチを
wで表現してみたんだが
伝わらなかったようでスマン
2021/09/06(月) 00:46:52.30ID:bCHQ7Kl80
そこそこできるんだけど、これ中学生辺り相手に家庭教師したらいい小遣い稼ぎになるんでね
2021/09/06(月) 00:51:02.10ID:4OUEmuPid
家庭教師なんて大学生の仕事だぞ
オヤジは採用されない
2021/09/06(月) 20:55:48.09ID:NYbUbMGR0
ハイパーリンクを絶対参照で設定しているのだけど(ファイル移動に備えて)表示文字列がフルパスだと
表示しきれないのでここだけ相対参照で表示したい.
絶対参照から相対参照文字列を取得する関数はないでしょうか?
2021/09/06(月) 22:01:27.65ID:6VddzRoR0
。。。ラムダ関数の件どうなったの?
2021/09/07(火) 01:09:39.85ID:fgpBZKKDa
>>871
Perlで自作
2021/09/07(火) 10:00:10.71ID:wW3S0zCbM
>>871
split
2021/09/07(火) 10:23:08.20ID:LRYELwZL0
>>874
ヒントありがとう.
1,リンク元とリンク先のフィアル名以外のフルパスを区切り文字¥で分割する.
2,共通部分を除いたリンク元の文字列数の個数だけ”.\”を共通部分を除いたリンク先の文字列&ファイル名
であっていますか?

2の部分で個数を数える処理とかをスマートのやる方法ありますか?思いつくのが文字列を一つずつ比較して
異なると抜けるみたいみたいな処理がしか思いつかないんで.
2021/09/07(火) 10:23:56.54ID:p7djLIgl0
>>871
相対参照でも表示しきれないものはどうする気だ?
2021/09/07(火) 10:24:49.55ID:LRYELwZL0
間違えた
1,リンク元とリンク先のフルパスを区切り文字¥で分割する.
2,共通部分を除いたリンク先の文字列&ファイル名に共通部分を除いたリンク元の文字列数の個数-1だけ”.\”をつける
2021/09/07(火) 10:25:31.04ID:LRYELwZL0
>>876
そこまで深くないんで.
2021/09/07(火) 10:31:48.41ID:p7djLIgl0
相対参照への変換は動作が変わるので
表示だけ工夫することを勧めるよ
2021/09/07(火) 10:43:18.05ID:LRYELwZL0
>>879
> 相対参照への変換は動作が変わるので
→アドレスそのものは絶対参照のままにするので動作はかわらないと思います.
2021/09/07(火) 11:37:34.66ID:p7djLIgl0
>>880
以下どれかじゃ駄目なん?

(a)Tooltipでちゃんと表示して通常は切れたまま
(b)2行に分けて表示
(c)パスの先頭から何文字か + ” 〜(省略)〜 ” + ファイル名
2021/09/07(火) 13:38:20.09ID:7P2mUzTw0
それ、どこからの相対パスが欲しいんだよ?
自分自身から自分自身への相対パスなら、全部.\だから
たんにファイル名だけ表示させればいいんじゃね

汎用的に真面目な相対パスに変換しようと思ったら結構邪魔くさいな
まあこういうのは大概すでに誰かがやってる
VB.NETだが
https://dobon.net/vb/dotnet/file/getabsolutepath.html#pathrelativepathto
とか。API呼び出しでやる方法もそこにある
2021/09/07(火) 15:24:56.80ID:LRYELwZL0
>>881
表示だけでは絶対パスがわからないのでTooltipは必要ですよね。
表示をファイル名だけにするか、C のようにするかですけど、表示だけである程度場所が分かりそうな情報が表示されていると便利なので、相対パスもしくはそのファイルがあるフォルダー名のどちらかにします。フォルダーは存在位置をだいたい覚えてるもんですから。
884デフォルトの名無しさん (ワッチョイ 5ff2-nzYM)
垢版 |
2021/09/08(水) 14:22:30.46ID:pb/a0YKS0
D列〜H列の各4項目を印刷エリアのA列に配置して
それぞれ印刷がしたいのですが、下記でも出力されますが、
もっと簡略な書き方あったら教えてください。

Sub PrintOut()
Range("A1").Value = Range("D1").Value
Range("A2").Value = Range("D2").Value
Range("A3").Value = Range("D3").Value
Range("A4").Value = Range("D4").Value
ActiveWindow.SelectedSheets.PrintOut

Range("A1").Value = Range("E1").Value
Range("A2").Value = Range("E2").Value
Range("A3").Value = Range("E3").Value
Range("A4").Value = Range("E4").Value
ActiveWindow.SelectedSheets.PrintOut

(以下F列分〜H列分まで繰り返している)

End Sub
2021/09/08(水) 15:21:04.14ID:75/i6xmb0
>>884
offset 関数を使って I と J のループで回せば?
2021/09/08(水) 15:22:28.05ID:XlNVU0UMH
>>884
Sub PrintOut()
  Dim a
  For c = 4 To 8
    a = Cells(1, c).Resize(4, 1)
    Range("A1:A4") = a
    ActiveWindow.SelectedSheets.PrintOut
  Next
End Sub
2021/09/08(水) 16:25:02.09ID:XlNVU0UMH
処理する範囲をわかりやすくしてみた

Sub PrintOut()
  Dim a
  For Each c In Range("D1:H1") 'DからHまで
    a = c.Resize(4, 1) '縦4行
    Range("A1").Resize(4, 1) = a
    ActiveWindow.SelectedSheets.PrintOut
  Next
End Sub
2021/09/08(水) 16:25:12.58ID:W4cHTvUwd
すげー!凄い短くなってる!
ありがとうございます。
後で試してみます。

まだVBA初めて間もないのですが、しっかり勉行すれば、
繰り返し作業簡素化の可能性を非常に感じました。
ありがとうございました。
889デフォルトの名無しさん (ワッチョイ 7f8e-m4tS)
垢版 |
2021/09/08(水) 16:48:49.57ID:q+ZxDcv00
またいつものあいつに引っ掛かる馬鹿ども
2021/09/08(水) 17:49:01.52ID:I0eTwbNOM
って言いたいだけの自尊心の擬人化さん
891デフォルトの名無しさん (アウアウウー Sa8b-AvaG)
垢版 |
2021/09/08(水) 18:05:21.93ID:ehctv71ga
ねぇねぇワクチンが足りないとか余って捨ててるとかなんなの?
Excelでさえ1億2千万人のデータぐらい余裕で作れるんじゃないの?
2021/09/08(水) 18:33:49.98ID:lGj0x8DT0
with派は?
2021/09/08(水) 18:39:36.93ID:wkgfp7fUa
Excelの印象派はちょっと困るねぇ
セル結合じゃなくてシェイプでやってよ
2021/09/08(水) 19:58:14.37ID:y8J9pOw20
Excelではどうにも出来ないたぐいのヒューマンエラーが多いからな
2021/09/09(木) 09:38:25.14ID:foh10V2pM
たとえば5000行もある住所録(一人一行使う)で、左端(つまりA列)にチェックボックスをつけるって出来ます?
5000個もチェックボックスオブジェクトを作るって現実にやってる方います?これは現実的でしょうか?

今考えてるのはA列に正方形(□)とレ点付きの□の二択プルダウンを用意することなんだけど、
それだとマウスのダブルクリックで表示を切り替えることは出来なくなる。

良い方法ありますか?
2021/09/09(木) 09:59:04.73ID:4tB32NIbH
>>895
チェックボックスを5000個作るぐらい簡単だが?
けど、そういう一覧表を作る意味がないだろ

5000件も手作業でチェックなんか入れてたら絶対にミスが起きるし
次の作業のことまで考えて表を作れよ
2021/09/09(木) 10:11:27.57ID:zJmTPnJXM
>>895
チェックボックスみたいなテキストでやる
2021/09/09(木) 10:12:10.09ID:FIynLA9Dd
>>896
自分も同じことを思ったけど解決策にならないレスはせずに放置がいいと思う
理解していけばしていくほどやれることを絞って考えていくようになるかと
2021/09/09(木) 10:25:59.17ID:4jr1qQtOd
参考 チェックボックスの絵文字 使用は推奨しない

2021/09/09(木) 10:27:08.70ID:2Kg/wmz7M
>>895
ダブルクリックかライトクリックイベントで背景色変えるとかなんか印を付けるとかした方が楽そう
2021/09/09(木) 10:32:22.27ID:IpCo+OYQ0
>>895
普通にその方法でいいじゃんと思うけど、ダブルクリック必須なの?
チェックボックスの操作ならせめてシングルクリックだと思うけど。

マウス必須ならA列にハイパーリンクを仕込んでおいて、イベント
ハンドラの中でどこが押されたかを判断して状態を反転させるという
方法もある。

ただこの場合A列は自由に入力可能なのでシートの保護を掛けることに
なると思うし、どの部分をどこまで編集可能とするかということとの
兼ね合いになると思う。
2021/09/09(木) 10:42:39.73ID:9k5sY4oP0
>>895
あなたの言ってることはダブルクリックとかチェックボックスとプルダウンとか意味不明なんだけど、やりたいことさえはっきりしてなら VBA でオブジェクトの追加コマンドを追加場所を1行から5000行まで変えながら回せばいい。
2021/09/09(木) 10:48:23.02ID:4tB32NIbH
>>902
セルをコピペすればセルに乗ってるオブジェクトも一緒にコピペされる
だからチェックボックスを5000個に増やすだけなら数クリックの手間だけで終わる
ブックが重くなるけどな
2021/09/09(木) 10:50:53.75ID:foh10V2pM
シングルクリックと間違えてました。
自動的に5000個作ると30分待っても終わらないので、ダメなのだと思ってました
2021/09/09(木) 10:53:21.37ID:foh10V2pM
>>897
>>896
チェックを入れた行だけ特定の書式にしてファイルとして出力する用途なので、そこは気にしないのです
2021/09/09(木) 11:01:26.77ID:4tB32NIbH
試しにやってみたけど、チェックボックス5000個コピペだけなら20秒ぐらいで終わったぞ
https://i.imgur.com/4Bo9Yvp.png
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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