だから私は単純に別のExcelファイルを開き、選択したセルに移動して最後に移動し(正しい方向に)、最新の塗りつぶされたセルを取得するためにExcelで簡単なマクロを作成(および動作)しました(これは1で拡張されるため)毎月)。
範囲を設定するには、最後と最後が何であれ-73の2ポイントを取得する必要がありました。最新のセルを選択した後、列番号を取得しました(つまり、A = 1、6 = fなど...)、そして次に、これを解析する関数を呼び出して、列の文字を再度返しました。
これを行っているときに、論理的に混乱し、なぜこれが起こるのか理解できない何かに出くわしたので、そこの第一人者がこれを私に説明してくれることを願っています.
コードでわかるように、2 つの整数が宣言されています。
- 始める
- フィン
目的のセルに到達したら、ActiveCell 列に fin = を作成します。私は単純にそうします;
Start = fin - 73
しかし、関数 ConvertToLetter を呼び出すと、start を通過したときに型の不一致エラーが発生したため、強制的に通過させました。
ref1 = ConvertToLetter(CInt(start))
そして、それはうまくいきました。
完全なコード;
Sub Test()
Dim rng As Range
Dim start, fin As Integer
Dim ref1, ref2 As String
Dim file, tabn As String
Dim XL As Object
Dim wkb As Excel.Workbook
Dim wks As Excel.Worksheet
Set rng = Range("C149")
file = "<File name>"
tabn = "<Tab Name>"
Set XL = CreateObject("Excel.Application")
XL.Application.Visible = True
XL.AskToUpdateLinks = False
XL.DisplayAlerts = False
XL.Application.Workbooks.Open (file)
Set wkb = XL.ActiveWorkbook
Set wks = wkb.Sheets(tabn)
wks.Activate
Set rng = wks.Range("C149")
rng.Select
rng.End(xlToRight).Select
fin = XL.ActiveCell.Column
start = fin - 73
If VarType(start) = vbInteger Then Debug.Print "Its an int!"
If VarType(start) = vbLong Then Debug.Print "Its a long!"
If VarType(start) = vbSingle Then Debug.Print "Its a single?"
If VarType(start) = vbDouble Then Debug.Print "ew double"
wkb.Close
XL.AskToUpdateLinks = True
XL.DisplayAlerts = True
XL.Quit
Set rng = Range("a1")
rng.Select
ref1 = ConvertToLetter(CInt(start))
ref2 = ConvertToLetter(fin)
End Sub
Function ConvertToLetter(iCol As Integer) As String
Dim iAlpha As Integer
Dim iRemainder As Integer
iAlpha = Int(iCol / 27)
iRemainder = iCol - (iAlpha * 26)
If iAlpha > 0 Then
ConvertToLetter = Chr(iAlpha + 64)
End If
If iRemainder > 0 Then
ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
End If
End Function
書式設定と醜い if ステートメントを許してください (これは、start が int であることを確認するためだけにありました)
私を困惑させたのは、ifステートメントを通過したときに、「それはintです!」を返したことです。
では、なぜ開始を許可する関数が解析されなかったのでしょうか?
なんとか回避できました
ref1 = ConvertToLetter(CInt(start))
一般に、これを事前に適用した場合
Before:
start = fin - 73
After:
start = (fin - 73)
そして、CINT を使用して解析する必要がなくなりました。
しかし、start が int であるとは考えられなかった理由を誰かが説明できますか? そして、なぜそれを括弧で囲むのですか?
私の頭にはこの論理があります。
たとえば、2 つの int があり、それらに数学的な問題を適用すると、結果は常に int になります。3.33333333 ではなく、10 / 3 = 3
では、なぜこの場合は int ではなかったのでしょうか?
どうもありがとう。