Ich behalte eine Tabelle mit allen meinen IP-Adressen in meinem Heimnetzwerk. Ich habe einen Umfang von 50 Adressen für die statische Konfiguration festgelegt und von denen habe ich ein paar "Gruppen" für bestimmte Arten von Geräten wie Computer oder Media Player NAS etc. definiert. Aus diesem Grund habe ich ungenutzte Adressen zwischen anderen, die mich führt zu meiner eigentlichen Frage. Wie schreibe ich eine Formel in Excel, die die verfügbaren Adressen bestimmt und auch möchte ich die nächste und dritte verfügbare Adresse auch, die ich durch eine Dezimalzahl wie 1 oder 2 oder 3Berechnen von unbenutzten IP-Adressen in Excel
Antwort
Sie könnten dies auf ein paar sehr kreative Weisen tun, ich bin nicht sehr gut mit Formeln, aber wenn VBA in Ordnung ist, kann ich das tun.
Public Sub GetIPs()
Dim RngArr As Variant
Dim IPRange(0 To 255) As Boolean 'you may want to change this to account for reserved IPs
Dim Rw As Long
Dim Results As Worksheet
RngArr = Sheet1.UsedRange.Columns("A:C").Value
If Not IsArray(RngArr) Then Exit Sub 'make sure we have more than 1 cell of data
For Rw = LBound(RngArr, 1) To UBound(RngArr, 1)
If RngArr(Rw, 2) Like "*.*.*.*" Then 'Just a very simple wilcard search for an IP
IPRange(CByte(Split(RngArr(Rw, 2), ".")(3))) = True 'set IPRange to true on the index/IP number
End If
Next Rw
Set Results = ThisWorkbook.Sheets.Add
For Rw = LBound(IPRange, 1) To UBound(IPRange, 1)
Results.Cells(1 + Rw, 1).Value = "192.168.1." & Rw
If IPRange(Rw) = True Then
Results.Cells(1 + Rw, 2).Value = "Taken"
Else
Results.Cells(1 + Rw, 2).Value = "Available"
End If
Next Rw
End Sub
Dies setzt voraus, Ihr Blatt ist (Codename) Sheet1 (das ist der Name es in den VBA-Fenstern Eigenschaften hat) entsprechend ändern. Es geht auch davon aus, dass Ihre IP-Daten in den Spalten B ein neues Blatt mit einer Liste aller genommenen und verfügbaren IP-Adressen erstellen, bearbeiten Sie einfach wie benötigt.
Ich habe einige IP (sowohl IPv4 und IPv6) Routinen für Excel erstellt. Ich habe einen, SubnetIPv4(IPv4 As String, Bits As Integer, Offset As Long) As String
:
Warnung: Ich schuf diese als schnell-und-schmutzige Lösungen, und ich habe sie seit mehreren Jahren nicht verwendet.
Dies ist eine gemeinsame Funktion für die anderen Funktionen:
Function CountStr(Source As String, Target As String) As Integer
Dim c, i As Integer
c = 0
If Not ((Source = "") Or (Target = "")) Then
For i = 1 To Len(Source)
If Mid(Source, i, Len(Target)) = Target Then
c = c + 1
End If
Next
End If
CountStr = c
End Function
IPv4:
Hinweise:
- Makros müssen
- IPv4 ist ein String aktiviert sein, Darstellen einer IPv4-Adresse in Dezimalpunkt Format
- Bits eine ganze Zahl (0 bis 32), die die Anzahl von Maskenbits
- Offset ist eine ganze Zahl, die die Host-Adresse in das Subnetz Offset
- Verwenden
0
Offset wird ein Teilnetz für jede IP-Adresse zurück - Verwendung einer IPv4-Adresse
255.255.255.255
und0
Offset wird eine Maske von Bits Größe
Diese Funktion zurück, wenn der str bestimmen ing eine IPv4-Adresse:
Function IsIPv4(IPv4 As String) As Boolean
Dim s As String
On Error GoTo InvalidIPv4
s = SubnetIPv4(IPv4, 32, 0)
IsIPv4 = True
Exit Function
InvalidIPv4:
IsIPv4 = False
End Function
Diese Funktion wird eine IPv4-Adresse zurück:
Function SubnetIPv4(IPv4 As String, Bits As Integer, Offset As Long) As String
Dim a() As String
Dim c, d, i As Integer
Dim m As Long
Dim s As String
If IPv4 = "" Then
GoTo InvalidIPv4
End If
c = CountStr(IPv4, ".")
If c <> 3 Then
GoTo InvalidIPv4
End If
c = CountStr(IPv4, "..")
If c > 1 Then
GoTo InvalidIPv4
End If
If (Left(IPv4, 1) = ".") Or (Right(IPv4, 1) = ".") Then
GoTo InvalidIPv4
End If
a = Split(IPv4, ".")
If UBound(a) <> 3 Then
GoTo InvalidIPv4
End If
On Error GoTo InvalidIPv4
For i = 0 To 3
If (Len(a(i)) > 0) And (Len(a(i)) < 4) Then
a(i) = CInt(a(i))
If (a(i) < 0) Or (a(i) > 255) Then
GoTo InvalidIPv4
End If
Else
GoTo InvalidIPv4
End If
Next
If (Bits < 0) Or (Bits > 32) Then
GoTo InvalidIPv4
End If
c = Bits Mod 8
d = Bits \ 8
If (Bits <> 0) And (c = 0) Then
c = 8
d = d - 1
End If
m = 0
For i = 0 To 7
m = m * 2
If c > 0 Then
m = m + 1
c = c - 1
End If
Next
a(d) = CStr(CLng(a(d)) And m)
For i = d + 1 To 3
a(i) = "0"
Next
If Offset < 0 Then
GoTo InvalidIPv4
End If
m = 0
For i = 1 To (32 - Bits)
m = m * 2
m = m + 1
Next
If Offset > m Then
GoTo InvalidIPv4
End If
m = Offset
For i = 3 To 0 Step -1
a(i) = a(i) + (m Mod 256)
m = m \ 256
Next
s = ""
For i = 0 To 3
s = s + CStr(a(i)) + "."
Next
s = Left(s, Len(s) - 1)
SubnetIPv4 = s
Exit Function
InvalidIPv4:
Error (3)
End Function
IPv6:
Hinweise:
- Makros muss aktiviert sein
- IPv6 ist eine Zeichenfolge eine IPv6-Adresse darstellt, die in Standardformat (führenden 0s sind optional und
::
works) - Bits eine ganze Zahl (0 bis 128), die die Anzahl von Maskenbits
- ein String Offset ist die Host-Adresse darstellt Offset in die Subnetz im Standardformat (führende 0-en sind optional und
::
Werke) - Verwendung entsprechender Offset zu
0
(::
,::0
,0:0:0:0:0:0:0:0
usw.) - Verwendung einer IPv6-Adresse 0 ein Subnetz für jede IP-Adresse zurückund Offset entspricht 0 eine Maske von Bits Größe zurück
Diese Funktion wird ermittelt, ob der String-Adresse eine IPv6 ist:
Function IsIPv6(IPv6 As String) As Boolean
Dim s As String
On Error GoTo InvalidIPv6
s = SubnetIPv6(IPv6, 128, "::")
IsIPv6 = True
Exit Function
InvalidIPv6:
IsIPv6 = False
End Function
Diese Funktion eine IPv6-Adresse wird zurückkehren:
Function SubnetIPv6(IPv6 As String, Bits As Integer, Offset As String) As String
Dim a() As String
Dim c, d, i As Integer
Dim m As Long
Dim s, t As String
If IPv6 = "" Then
GoTo InvalidIPv6
End If
c = CountStr(IPv6, ":")
If (c < 2) Or (c > 8) Then
GoTo InvalidIPv6
End If
d = CountStr(IPv6, "::")
If d > 1 Then
GoTo InvalidIPv6
End If
If (Left(IPv6, 1) = ":") And (Not (Left(IPv6, 2) = "::")) Then
GoTo InvalidIPv6
End If
If (Right(IPv6, 1) = ":") And (Not (Right(IPv6, 2) = "::")) Then
GoTo InvalidIPv6
End If
s = IPv6
If d = 1 Then
If Left(s, 2) = "::" Then
s = "0" + s
End If
If Right(s, 2) = "::" Then
s = s + "0"
End If
t = ":"
For i = c To 7
t = t + "0:"
Next
s = Replace(s, "::", t)
End If
a = Split(s, ":")
If UBound(a) <> 7 Then
GoTo InvalidIPv6
End If
On Error GoTo InvalidIPv6
For i = 0 To 7
If (Len(a(i)) > 0) And (Len(a(i)) < 5) Then
a(i) = WorksheetFunction.Hex2Dec(a(i))
Else
GoTo InvalidIPv6
End If
Next
If (Bits < 0) Or (Bits > 128) Then
GoTo InvalidIPv6
End If
c = Bits Mod 16
d = Bits \ 16
If (Bits <> 0) And (c = 0) Then
c = 16
d = d - 1
End If
m = 0
For i = 0 To 15
m = m * 2
If c > 0 Then
m = m + 1
c = c - 1
End If
Next
a(d) = CStr(CLng(a(d)) And m)
For i = d + 1 To 7
a(i) = "0"
Next
If Offset = "" Then
GoTo InvalidIPv6
End If
c = CountStr(Offset, ":")
If (c < 2) Or (c > 8) Then
GoTo InvalidIPv6
End If
d = CountStr(Offset, "::")
If d > 1 Then
GoTo InvalidIPv6
End If
If (Left(Offset, 1) = ":") And (Not (Left(Offset, 2) = "::")) Then
GoTo InvalidIPv6
End If
If (Right(Offset, 1) = ":") And (Not (Right(Offset, 2) = "::")) Then
GoTo InvalidIPv6
End If
s = Offset
If d = 1 Then
If Left(s, 2) = "::" Then
s = "0" + s
End If
If Right(s, 2) = "::" Then
s = s + "0"
End If
t = ":"
For i = c To 7
t = t + "0:"
Next
s = Replace(s, "::", t)
End If
b = Split(s, ":")
If UBound(b) <> 7 Then
GoTo InvalidIPv6
End If
On Error GoTo InvalidIPv6
For i = 0 To 7
If (Len(b(i)) > 0) And (Len(b(i)) < 5) Then
b(i) = WorksheetFunction.Hex2Dec(b(i))
Else
GoTo InvalidIPv6
End If
Next
c = Bits Mod 16
d = Bits \ 16
If (Bits <> 0) And (c = 0) Then
c = 16
d = d - 1
End If
m = 0
For i = 0 To 15
m = m * 2
If c > 0 Then
m = m + 1
c = c - 1
End If
Next
For i = 0 To d - 1
If b(i) <> "0" Then
GoTo InvalidIPv6
End If
Next
If b(d) <> CStr(CLng(b(d)) And m) Then
GoTo InvalidIPv6
End If
For i = 7 To d Step -1
a(i) = CStr(CLng(a(i)) + CLng(b(i)))
Next
s = ""
For i = 0 To 7
s = s + WorksheetFunction.Dec2Hex(a(i)) + ":"
Next
s = Left(s, Len(s) - 1)
SubnetIPv6 = s
Exit Function
InvalidIPv6:
Error (3)
End Function
- 1. Berechnen von Perzentilen in Excel
- 2. Berechnen Zeitunterschied in Excel
- 3. berechnen Payback Wert in Excel
- 4. DatagridView: Unbenutzten Speicherplatz entfernen?
- 5. Preis berechnen form excel javascript
- 6. Formeln in Excel mit Python berechnen
- 7. excel Steigung in Bereich berechnen, führende Nullen
- 8. Reduzieren Sie den unbenutzten Bereich von sidebarPanel
- 9. Gibt es irgendwelche unbenutzten Symbole in Python?
- 10. Finden Sie alle unbenutzten Variablen
- 11. Suche nach unbenutzten Dateien in Xcode
- 12. Verwenden von Excel zum Berechnen mehrerer zukünftiger Daten
- 13. gcc Linker Liste der unbenutzten Objekte
- 14. Entfernen von unbenutzten LIB-Dateien aus Visual C++ Build
- 15. berechnen Prozent in R
- 16. Berechnen von Permutationen in F #
- 17. Berechnen von Skriptspeicherverwendungen in PHP?
- 18. ASP.NET/VS2010 Suchen nach unbenutzten Dateien in Projekt
- 19. Suche nach unbenutzten Sichten/Teilbildern in Ruby on Rails
- 20. berechnen die Differenz zwischen zwei Daten und Zeit auf Excel
- 21. So berechnen Sie dynamisch Werte aus der Excel-Tabelle
- 22. Wie finden Sie alle unbenutzten Code in Ruby on Rails
- 23. Wie alle unbenutzten COM-Port in Laptop zu löschen?
- 24. Suchen der niedrigsten unbenutzten eindeutigen ID in einer Liste
- 25. MacOS, wie man unbenutzten Service-Artikel in Tastaturkürzel zu löschen
- 26. EXCEL DAX - Berechnen Sie die Summe einer zugehörigen Tabelle
- 27. Berechnen der Steigung einer Reihe von Werten
- 28. Berechnen von SVG-Pfaden
- 29. Berechnen der Summe von Zeile 4 in Excel CSV-Datei Python
- 30. Wie berechnen Sie das Quintil für Gruppen von Zeilen in Excel?
Dies ist eine Art von was ich betrachtete, wenn dies auf eine Weise funktionieren könnte, dass ich die erste zweite und dritte verfügbare IP hätte, wäre ich perfekt.Ich habe versucht, es mit einer vlookup und if-Anweisung (getrennt und zusammen als eine Formel) zu verwenden, aber ich konnte kein Argument erhalten, das erste, zweite oder dritte – Henk
gut, wenn Sie diese Methode verwenden wollten, können Sie entweder einfach die Schleife Taken/Available Spalte und listet die verfügbaren IPs auf, oder ändern Sie einfach den ursprünglichen Code (die letzte Schleife), um Taken IPS zu ignorieren und stattdessen die verfügbaren IPs aufzulisten –