#1 15.09.10 17:17
Помогите с VBA
Private Sub CommandButton1_Click()
Worksheets("Лист1").Range("A1") = TextBox1
Dim x As String
Dim i, z, j, y, k, p As Integer
Dim q, w As Single
k = Len(TextBox1)
w = 0
p = 1
For i = 1 To 32
j = 0
z = 0
Do While (j <> k)
x = Mid(TextBox1, j + 1, 1)
If Asc(x) = 223 + i Then z = z + 1
If Asc(x) = 190 + i Then z = z + 1
j = j + 1
Loop
If z <> 0 Then
p = p + 1
Worksheets("Лист1").Cells(p, 3) = z
Worksheets("Лист1").Cells(p, 2) = Chr(223 + i)
y = z / k
Worksheets("Лист1").Cells(p, 4) = y
q = -Log(y) / Log(2)
Worksheets("Лист1").Cells(p, 5) = q
Worksheets("Лист1").Cells(p, 6) = y * q
w = w + y * q
End If
z = 0
Next i
Worksheets("Лист1").Cells(p + 1, 6) = w
Worksheets("Лист1").Cells(p + 1, 3) = k
End Sub
Почему он проверяет 32 буквы, а не 33?
223 код маленьких букв, если к нему прибавить 1, то это будет код второй буквы или первой?
Если что-то нужно изменить, то помогите, пожалуйста.
Offline
#6 15.09.10 22:03
Re: Помогите с VBA
http://ascii.org.ru/
буквы ё нет в таблице ASCII
Исправлено mr.Nobody (15.09.10 22:04)
Offline
#9 18.09.10 23:55
Re: Помогите с VBA
мб не актуально, но судя по коду, он считает количество различных русских букв в слове(ну и выводит цифры всякие;). собственно:
000Ангелишка000 написал(а):
If Asc(x) = 190 + i Then z = z + 1
тут вместо 190 должно быть 191, ибо А имеет код 192.
mr.Nobody написал(а):
буквы ё нет в таблице ASCII
винда говорит, что 'Ё' имеет код 168, а 'ё' - 184.
зы.
000Ангелишка000 написал(а):
Worksheets("Лист1").Cells(p, 2) = Chr(223 + i)
глядя на это создаётся впечатление, что регистр букв не важен. если это так, то можно с помощью LCase избавиться от ифа с большими буквами.
Исправлено dorido (19.09.10 00:00)
Offline
#10 20.09.10 16:34
#11 21.09.10 12:46
#12 21.09.10 16:53
#13 21.09.10 16:57
#14 23.09.10 01:02
Re: Помогите с VBA
Aguero написал(а):
хотя бы алгоритм
Код: vb:
For i = 1 to len(s) tmp=mid$(s,i,1) If i mod 2 = 1 Then Select Case Asc(tmp) Case 224, 229, 184, 232, 238, 243, 251, 253, 254, 255 ' коды для русских букв tmp=Ucase(tmp) End Select End If e=e+tmp Next i
исходная строка - s, результат - e.
зы, вместо селект кейса стоит сделать иф, но там больше букв)
Исправлено dorido (23.09.10 02:09)
Offline
#15 23.09.10 01:31
Re: Помогите с VBA
вот что у меня получилось, может можна какнить дополнить
Private Sub ввод_Click()
Dim x, c As String
Dim i, z, j, y, k, p As Integer
Dim q, w As Single
Dim ff(9) As String
ff(0) = "а"
ff(1) = "е"
ff(2) = "и"
ff(3) = "о"
ff(4) = "у"
ff(5) = "ы"
ff(6) = "э"
ff(7) = "ю"
ff(8) = "я"
k = Len(TextBox1)
w = 1
i = 1
Do While (i <= k)
x = Mid(TextBox1, i, 1)
j = 0
p = i Mod 2
If p = 1 Then
Do While (j < 9 And w = 1)
z = Asc(x)
If x = ff(j) Then
y = Asc(x)
y = y - 32
x = Chr(y)
w = 0
End If
j = j + 1
Loop
End If
TextBox2.Text = TextBox2.Text + x
i = i + 1
w = 1
Loop
End Sub
Offline
#16 23.09.10 02:06
Re: Помогите с VBA
1.
Aguero написал(а):
z = Asc(x)
зачем эта строчка?
2. имо, но лучше из do сделать for циклы. тогда в цикле по j, в качестве флажка(вместо w=0) использовать exit for(или извращенский j=10)
3. если оставить do циклы, то
Aguero написал(а):
w = 1
засунусть после
Aguero написал(а):
If p = 1 Then
а из других мест убрать
Исправлено dorido (23.09.10 02:07)
Offline
#17 19.10.10 21:03
Re: Помогите с VBA
Может кому пригодится еще один вариант)))
Dim MyText, n, textlen, t, go, rez
t = ""
MyText = InputBox("Введите слово:")
textlen = Len(MyText)
For n = 1 To textlen
go = Mid(MyText, n, 1)
If n Mod 2 = 1 Then
If go Like "[а]" Then
go = "А"
End If
If go Like "[е]" Then
go = "Е"
End If
If go Like "[ё]" Then
go = "Ё"
End If
If go Like "[и]" Then
go = "И"
End If
If go Like "[о]" Then
go = "О"
End If
If go Like "[ю]" Then
go = "Ю"
End If
If go Like "[я]" Then
go = "Я"
End If
If go Like "[ы]" Then
go = "Ы"
End If
If go Like "[э]" Then
go = "Э"
End If
End If
t = t + go
Next n
MsgBox t
Offline

