Microsoft Excel'de VBA aracılığıyla Ters Metin ve Sayı nasıl elde edilir

Anonim

Excel'de, metni tamamen tersine çevirmek veya VBA koduyla sırasını almak istediğimiz zamanlar vardır. Ters hücre içeriği, ters hücre sırası vb. gibi çeşitli gereksinimler olabilir.

Bu yazıda şunları öğreneceğiz:

  • Ters hücre içeriği nasıl elde edilir?
  • Bir hücreden tüm kelimeleri ters sırada nasıl alabilirim?
  • Sütun sırası nasıl tersine çevrilir?
  • Yalnızca metinden ters sayılar nasıl alınır?
  • Activecell'in hücre içeriği nasıl tersine çevrilir?

Ters hücre içeriği nasıl elde edilir?

Excel'de hücrelerdeki metni veya sayıları tersine çevirme gereksinimi vardır; "ingilizce"den "hsilgne"ye

Çıktıdan önceki verilerin anlık görüntüsü aşağıdadır:

B sütunundaki gerekli çıktının anlık görüntüsü aşağıdadır:

Yukarıdaki çıktıyı almak için VB editörünü başlatmak için aşağıdaki adımları izlememiz gerekiyor.

  • Geliştirici sekmesine tıklayın
  • Kod grubundan Visual Basic'i seçin

  • Aşağıdaki kodu standart modüle kopyalayın
 Fonksiyon CompleteReverse(rCell As Range, Opsiyonel IsText As Boolean) Dim i As Integer Dim StrNewTxt As String Dim strOld As String strOld = Trim(rCell) For i = 1 To Len(strOld) StrNewTxt = Mid(strOld, i, 1) & StrNewTxt Sonraki i If IsText = False O zaman CompleteReverse = CLng(StrNewTxt) Else CompleteReverse = StrNewTxt End If End Function 

  • B1 hücresinde formül şöyle olacaktır:
  • =TamamlaTers(A1,DOĞRU)

Bir hücreden tüm kelimeleri ters sırada nasıl alabilirim?

Çözümü bulmak için birkaç kodumuz olacak. Tüm kelimeleri tam ters sırada almak için, aşağıdaki kodu modüle kopyalayıp yapıştıracağız.

 Fonksiyon ReverseOrder1(Rng As Range) Dim Val As Variant, Counter As Integer, R() As Variant Val = Split(Application.WorksheetFunction.Substitute(Rng.Value, " ", ""), ",") ReDim R(LBound (Val) UBound(Val)) için Counter = LBound(Val) To UBound(Val) R(UBound(Val) - Counter) = Val(Counter) Sonraki Sayaç ReverseOrder1 = Join(R, ", ") End Function 

  • C1 hücresinde formül şöyle olacaktır:
  • =TersSipariş1(A1)

İkinci VBA koduna bir göz atalım:

 Fonksiyon ReverseOrder2(Rng As Range) As String Dim Counter As Long, R() As String, temp As String R = Split(Replace(Rng.Value2, " ", ""), ",") For Counter = LBound(R ) To (UBound(R) - 1) \ 2 temp = R(UBound(R) - Sayaç) R(UBound(R) - Sayaç) = R(Sayaç) R(Sayaç) = temp Sonraki Sayaç ReverseOrder2 = Join(R , ", ") Bitiş Fonksiyonu 

  • D1 hücresinde formül şöyle olacaktır:
  • =TersSipariş2(A1)

Sütun sırası nasıl tersine çevrilir?

Bir sütun verisinin sırasını tersine çevirme gereksiniminiz varsa, aşağıdaki koda daha yakından bakmanız gerekir:

 Sub ReverseColumnOrder() Dim wBase As Worksheet, wResult As Worksheet, i As Long, x As Long Set wBase = Sheets("Sheet1") Set wResult = Sheets("Sheet2") Application.ScreenUpdating = False with wBase For i = .Range ("A1").CurrentRegion.Rows.Count To 1 Step -1 x = x + 1 .Range("A1").CurrentRegion.Rows(i).Copy wResult.Range("A" & x) Sonraki i End Application.ScreenUpdating ile = True End Sub 

Yukarıdaki kod, 1. sayfadaki A sütunundaki verileri kontrol edecek ve ardından 2. sayfadaki sırayı tersine çevirecektir. Aşağıdaki resme bakın.

Yalnızca metinden ters sayılar nasıl alınır?

Örnek: "excel (123) ipucu" hücre içeriğidir

Çıktı gerektir: "excel (321) ipucu"

Excel'de, aynı çıktıyı almanın birden fazla yolu olabilir ve aynısı VBA UDF'leri ile çözüm bulmak için de geçerlidir. Bu örnek için 5 farklı yol göstereceğiz.

Aşağıdaki kodları standart modüle kopyalayıp yapıştırın:

 Fonksiyon ReverseNumber1(v Varyant Olarak) As String Dim iSt As Integer, iEnd As Integer, sNum As String, sTemp As String iSt = InStr(v, "(") iEnd = InStr(v, ")") iSt = 0 ise Veya iEnd = 0 Sonra ReverseNumber1 = v: Çıkış Fonksiyonu sNum = Mid(v, iSt + 1, iEnd - iSt - 1) için i = Len(sNum) To 1 Adım -1 sTemp = sTemp & Mid(sNum, i, 1) Sonraki i ReverseNumber1 = Left(v, iSt) & sTemp & Mid(v, iEnd, 5 5) End Function Function ReverseNumber2(s As String) As String Dim i&, t$, ln& t = s: ln = InStr(s , ")") - 1 For i = InStr(s, "(") + 1 To InStr(s, ")") - 1 Mid(t, i, 1) = Mid(s, ln, 1) ln = ln - 1 Sonraki ReverseNumber2 = t Son Fonksiyon Fonksiyon ReverseNumber3(c00) c01 = Split(Split(c00, ")")(0), "(")(1) ReverseNumber3 = Değiştir(c00, "(" & c01 & ") )", "(" & StrReverse(c01) & ")") End Function Function ReverseNumber4(c00) ReverseNumber4 = Left(c00, InStr(c00, "(")) & StrReverse(Mid(Left(c00, _ InStr( c00, ")") - 1), InStr(c00, "(") + 1)) & Mid(c00, InStr(c00, ")")) End Function Function ReverseNumber5(s As String ) CreateObject("VBScript.Regexp") ile Nesne Olarak Dim .Global = True .Pattern = "(\D*)(\d*)" .Execute(s) İçinde Her m için ReverseNumber5 = ReverseNumber5 & m.submatches( 0) & StrReverse(m.submatches(1)) Set ile Sonraki Son m = Hiçbir Şey Bitiş Fonksiyonu 

  • B2 hücresinde formül şu şekilde olacaktır:
  • =TersSayı1(A2)

Diğer 4 kodu aşağıdaki formülle test edebiliriz:

1. =TersSayı2(A2)

2. =TersSayı3(A2)

3. =TersSayı4(A2)

4. =TersSayı5(A2)

Yukarıdaki 5 makro kodunun tümü aynı çıktıyı sağlayacaktır; Yine de; en rahat oldukları kodu benimseyebilirler.

Activecell'in hücre içeriği nasıl tersine çevrilir?

Bir makronun yalnızca activecell'de çalışmasını ve ardından içeriği tersine çevirmesini istiyorsanız. Bu kod, formülü içeren hücrede çalışmayacaktır.

Aşağıdaki kodu kullanacağız:

 Sub Reverse_Cell_Contents() 'bu makro sadece aktif hücrede çalışacak' --- Yorum ActiveCell.HasFormula Değilse Sonra sRaw = ActiveCell.Text sNew = "" j = 1 için Len(sRaw)'a sNew = Mid(sRaw, j, 1 ) + sNew Sonraki j ActiveCell.Value = sNew End If End Sub 

İmleç "exceltip" içeren A1 hücresindeyse, yukarıdaki makro onu "pitlecxe" e dönüştürür.

Çözüm: Microsoft Excel'de tek bir çözüm için çok sayıda UDF'ye sahip olabiliriz. Bu UDF, 2003 sürümünden 2013'e kadar çalışacaktır.

Bloglarımızı beğendiyseniz, Facebook'ta arkadaşlarınızla paylaşın. Ayrıca bizi Twitter ve Facebook'ta da takip edebilirsiniz.

Sizden haber almayı çok isteriz, işimizi nasıl iyileştirebileceğimizi, tamamlayabileceğimizi veya yenileyebileceğimizi ve sizin için daha iyi hale getirebileceğimizi bize bildirin. bize yazın e-posta sitesi