Excel-VBA 小技

ExcelのSheetで、同じ文字列を一気に削除するVBA
指定した文字列を一旦カラー化し、その後削除のY/Nを尋ねる方法
冗長な手法だけど、可読性は高く、改造し易い・・・・

以下が、Source

Sub SAKUJYO()
'
' SAKUJYO Macro
'

Sheets("Room").Select

Range("B5:BA33").Select
With Selection.Font

.Name = "游ゴシック"
.FontStyle = "標準"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor

End With
Range("A4").Select

Dim D_thcd As String

Dim i As Long, j As Long, k As Long

Dim Rtn As Integer

Dim Cnt As Long


D_thcd = InputBox("削除するcodeを入力", , "th")


If Left(D_thcd, 2) <> "th" Or Len(D_thcd) <> 5 Then

MsgBox ("codeが間違っています")

End

Else

'--------------------------------------------
' 指定したcodeの文字を赤にする

For k = 5 To 33

For i = 2 To 53

If Cells(k, i) = D_thcd Then

Cells(k, i).Font.ColorIndex = 3
Cnt = Cnt + 1

End If

Next i

Next k

End If

'-------------------------------------------------
' 指定した文字を削除し、背景を着色する

Rtn = MsgBox("削除しますか", vbYesNo, Cnt & "件あります")

If Rtn = vbYes Then

For k = 5 To 33

For i = 2 To 53

If Cells(k, i) = D_thcd Then

Cells(k, i) = ""
Cells(k, i).Interior.ColorIndex = 19 'セルを着色する

End If

Next i

Next k

Else

End

End If

'
End Sub




わかお かずまさ
VegaSystems

📷📷📷📷📷📷
#LAN_PRO
#Bloguru
#kuma

People Who Wowed This Post

識別文字

その昔、プログラムで口糊をしていた時代がありました。
Cを朝から晩まで、狂った様に書き続けた記憶があります。
問題は、そのSouceの盗用防止です。

退職したり、外注にLIBを渡した場合、それがそのまま他社で使われたらたまりません。
そのため、密かに識別単語、識別文字を使っていました。
識別文字は変数にわざとミススペルを、識別文字で最も多く使ったのは「K」です。
LOOP変数には通常小文字を使いますが、「K」だけは大文字を使います。
一番、苦労して手間がかかるのはLOOP構文なのです。

盗用で争う事を想定しての防御で、社員にも外注にも、その存在を告知していました。
識別単語、識別文字があれば、Souceの比較で盗用が立証できます(判例あり)、
いわゆる地雷です、ゼロからコーディングすれば良いのですが、Souceを持ち出し、
それを窃用したら、損害賠償問題となりますから、これがある事を意識させるのが
一番の防止策でした、遠い昔の思い出です・・・・


以下はSouceの一部、「K」に注目!!

Dim i As Long, j As Long, K As Long


For K = 5 To 33

For i = 2 To 53

For j = i + 1 To 53


わかお かずまさ
VegaSystems

📷📷📷📷📷📷
#LAN_PRO
#Bloguru
#kuma

People Who Wowed This Post

Excel-VBA 重複データの検出

Excelでの入力後のチェックで厄介なのは「重複」です。
今回はシフト表での問題。

値は正しいのですが、時間帯が重複することは許されないので、これを検出します。
Loop でセルを一個、一個確認しながら比較する、原始的な方法ですが、検出時に
該当セルのフォントを着色出来る強みがあります。

縦に時間軸、横が作業場所、同じ時間帯に同一ワーカー(コードth999)が、存在
した場合、重複データのフォントを赤に変更、ただし比較は1:1まで。
修正後、再チェックを繰り返せば2個以上でもOK
構文は可読性を重要視しています・・・・

以下はそのSouce

Sub DupCHECK()
'
' DupCHECK Macro

' Sheet Room でのヘルパーの時間帯重複のCHECK


Sheets("Room").Select



Range("B5:BA33").Select
With Selection.Font
.Name = "游ゴシック"
.FontStyle = "標準"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
Range("A4").Select


Dim i As Long, j As Long, K As Long


For K = 5 To 33

For i = 2 To 53

For j = i + 1 To 53

If Left(Cells(K, i), 1) <> "t" Then
Exit For
End If

If Cells(K, i) = Cells(K, j) Then
Cells(K, i).Font.ColorIndex = 3
Cells(K, j).Font.ColorIndex = 3
Exit For
End If

Next j

Next i

Next K

'
End Sub



わかお かずまさ
VegaSystems

📷📷📷📷📷📷
#LAN_PRO
#Bloguru
#kuma

People Who Wowed This Post

×
  • If you are a bloguru member, please login.
    Login
  • If you are not a bloguru member, you may request a free account here:
    Request Account